iT邦幫忙

0

Django + Uwsgi 如何指派全部worker執行我要執行的程式?

各位好, 我目前有個Singleton的class

@singleton
class A:
    data = get_from_redis()
    
    def get_data(self):
        return self.data
    def set_data(self):
        data = 'hello world'

由於uwsgi我設定10個worker在運行, 當我指派

A().set_data()

則只有一個worker的data會被我改過去, 則其他的worker仍就是當初初始化出來從redis載入的值

由於data很大, 所以我讓他在初始化時就靜態被賦予並暫存記憶體, 以便能更快速的調用

但現在卡關的部分就是我找不到方法可以像是postfork在process在fork前預載後分叉

@uwsgidecorators.postfork
def preload():
    """do something"""
    
froce iT邦大師 2 級 ‧ 2019-11-30 19:04:15 檢舉
https://uwsgi.readthedocs.io/en/latest/Signals.html#signals-targets
這個?
傳送信號給所有workers一起改?
froce iT邦大師 2 級 ‧ 2019-11-30 19:19:41 檢舉
我平常不會做那麼大的系統,所以理解可能不夠。錯的請見諒

> 由於data很大, 所以我讓他在初始化時就靜態被賦予並暫存記憶體, 以便能更快速的調用

你每個worker都給一份資料的備份的意思?

> 但現在卡關的部分就是我找不到方法可以像是postfork在process在fork前預載後分叉

postfork是worker產生時執行的工作吧?你是想在worker初始化的時候弄一個方法接收資料變化?
> 由於data很大, 所以我讓他在初始化時就靜態被賦予並暫存記憶體, 以便能更快速的調用: 是的, 考慮到配備可以開很高, 所以就想直接靜態暫存讓各個worker可以最快速取得已經整理好.並實例化的instance, 若靠Redis之類我還要跟他取一大筆keyvalue在轉值等等作業, 會很慢(如果10個以上的worker都在做這件事, 效能會變不好)

> 但現在卡關的部分就是我找不到方法可以像是postfork在process在fork前預載後分叉: 對, 不過目前依照大大指教的singal方式, 現在有大大的進展了

感謝大大

尚未有邦友回答

立即登入回答