在Python 進程之間共用鎖定
當嘗試在多個進程之間使用鎖定時,您可能會遇到錯誤, 「鎖定物件應該只透過繼承在進程之間共享。」
要解決這個問題,有兩種主要方法:
使用Manager
此方法涉及建立一個Manager 物件並傳遞Manager.Lock():
from multiprocessing import Manager ... m = Manager() l = m.Lock()
但是,使用 Manager 需要一個額外的進程來託管 Manager 伺服器並透過 IPC 進行通訊。
在池中傳遞鎖定創建
另一種方法是使用初始化器關鍵字參數在池創建時傳遞常規multiprocessing.Lock():
def init(l): global lock lock = l l = multiprocessing.Lock() pool = multiprocessing.Pool(initializer=init, initargs=(l,))
此方法使鎖實例在所有子程序中全域化。請注意,這種方法消除了對偏函數的需要。
透過採用其中一種技術,您可以在 Python 進程之間有效地共享鎖,從而允許協調存取共享資源。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3