多重處理中的共享記憶體物件
在Python 的多處理庫中,您面臨同時在多個進程之間共享大型隻讀數組的挑戰。
使用Fork() 語義
如果您的作業系統使用寫時複製fork() 語義(例如Unix),您的唯讀資料結構將所有子進程都可以訪問,而無需額外的記憶體消耗。這是因為 fork() 建立了一種寫入時複製操作,因此一個程序對資料結構的變更只會寫入到自己的記憶體空間,而其他程序則保持原始資料結構不變。
將陣列打包到共享記憶體
為了提高效率,請將陣列轉換為 NumPy 或陣列結構並將其儲存在共享記憶體中。圍繞它創建一個 multiprocessing.Array 包裝器並將其傳遞給您的函數。
可寫入共享對象
如果您需要可寫共享對象,請使用同步或鎖定機制。多處理提供兩種方法:
Manager 代理程式方法可以處理任意Python 對象,但由於進程間通訊涉及物件序列化和反序列化,速度較慢。
替代方法
除了多處理之外,Python 中還有各種並行處理庫。如果您有多重處理可能無法充分滿足的特定要求,請考慮這些選項。
以上是如何在 Python 的多處理中的多個進程之間共享大型唯讀數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!