多重處理中的共享記憶體
在Python的多處理模組中,大數據結構是否在進程之間共享或複製的問題是值得關注的。
原創關注點
使用multiprocessing.Process 建立多個進程並傳入大型列表作為參數時,需要關注的是這些列表是為每個進程複製還是在它們之間共享。如果每個進程都進行複製,可能會顯著增加記憶體使用量。
寫入時複製
Linux 使用寫入時複製方法,這表示資料在修改之前不會被物理複製。這表示每個子進程的清單不會重複。
引用計數
但是,存取物件會更新其引用計數。如果子程序存取清單元素,其引用計數就會增加。因此,不清楚是否會複製整個物件(列表)。
記憶體使用情況監控
觀察顯示整個物件實際上是每個子進程都有重複,可能是由於引用計數。如果清單無法修改且它們的參考計數始終為正,則這是有問題的。
Python 3.8.0 中的共享記憶體
Python 3.8.0 引入了「true」使用 multiprocessing.shared_memory 模組共享記憶體。這允許明確建立可以從多個進程存取的共享記憶體對象,而無需複製。
總之,Linux 中的寫入時複製方法降低了複製大型資料結構的可能性,但引用計數可以導致實際的複製。在 Python 3.8.0 中使用「真正的」共享記憶體透過提供創建明確共享物件的機制解決了這個問題。
以上是Python 的多重處理中是否共享或複製大型資料結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!