在共享記憶體中使用numpy 數組進行多處理
在共享記憶體中使用numpy 數組對於高效的多處理任務至關重要。多處理模組提供了一種在多個進程之間分配工作負載的簡單方法,但是處理在這些進程之間共享的 numpy 數組會帶來挑戰。
在提供的程式碼片段中,嘗試使用 multiprocessing.Array 類別共享 numpy 陣列被製成。雖然這允許存取單一數組元素,但它並不完全支援 numpy 數組操作。
要解決此問題,請考慮使用shared_arr.get_lock() 方法來確保必要時同步存取:
def f(i): with shared_arr.get_lock(): arr = np.frombuffer(shared_arr.get_obj()) arr[i] = -arr[i]
此方法確保在任何給定時間只有一個進程可以修改共享數組,從而保持資料完整性。
另一種方法可以消除這種需要明確同步的方法是:
def f(i): arr = np.frombuffer(shared_arr.get_obj()) arr[i] = -arr[i]
這是有效的,因為Python 的GIL(全域解釋器鎖定)對所有Python 字節碼執行(包括numpy 程式碼)強制執行單線程。 GIL 確保一次只有一個執行緒可以存取共享記憶體。
最後,如果不需要同步訪問,請考慮使用 multiprocessing.sharedctypes.RawArray 類別。 RawArray不提供任何同步機制,適合實現自訂鎖定機制的場景。
以上是如何在 Python 中高效使用共享記憶體中的 NumPy 陣列進行多重處理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!