首頁  >  文章  >  後端開發  >  Python 的多重處理中是否共享或複製大型資料結構?

Python 的多重處理中是否共享或複製大型資料結構?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-03 08:04:02482瀏覽

Are Large Data Structures Shared or Copied in Python's Multiprocessing?

多重處理中的共享記憶體

在Python的多處理模組中,大數據結構是否在進程之間共享或複製的問題是值得關注的。

原創關注點

使用multiprocessing.Process 建立多個進程並傳入大型列表作為參數時,需要關注的是這些列表是為每個進程複製還是在它們之間共享。如果每個進程都進行複製,可能會顯著增加記憶體使用量。

寫入時複製

Linux 使用寫入時複製方法,這表示資料在修改之前不會被物理複製。這表示每個子進程的清單不會重複。

引用計數

但是,存取物件會更新其引用計數。如果子程序存取清單元素,其引用計數就會增加。因此,不清楚是否會複製整個物件(列表)。

記憶體使用情況監控

觀察顯示整個物件實際上是每個子進程都有重複,可能是由於引用計數。如果清單無法修改且它們的參考計數始終為正,則這是有問題的。

Python 3.8.0 中的共享記憶體

Python 3.8.0 引入了「true」使用 multiprocessing.shared_memory 模組共享記憶體。這允許明確建立可以從多個進程存取的共享記憶體對象,而無需複製。

總之,Linux 中的寫入時複製方法降低了複製大型資料結構的可能性,但引用計數可以導致實際的複製。在 Python 3.8.0 中使用「真正的」共享記憶體透過提供創建明確共享物件的機制解決了這個問題。

以上是Python 的多重處理中是否共享或複製大型資料結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn