簡體   English   中英

Python多處理:RuntimeError:“只應通過繼承在進程之間共享隊列對象”

[英]Python multiprocessing: RuntimeError: “Queue objects should only be shared between processes through inheritance”

我知道multiprocessing.Manager()以及它如何用於創建共享對象。 特別是,可以在工人之間共享的隊列。 有這個問題 ,這個問題 ,還有這個問題

但是,這些鏈接沒有提到為什么我們可以使用繼承來在進程之間共享。 據我了解,在這種情況下仍然只能復制隊列。

python中的Queue實現依賴於系統pipe將數據從一個進程傳輸到另一個進程以及一些semaphores來保護此pipe上的讀寫。

pipe在進程中作為打開文件處理,並且由於操作系統限制,只能在生成時與子進程共享。
對於早期版本的python, semaphores也被視為只應在產卵時共享的文件,至少在基於UNIX的系統中。

由於這兩個子對象通常不能共享,因此一旦啟動,就無法對Queue進行pickle並將其發送到子進程。

但是,對於某些操作系統和最新版本的python,可以共享Connection並創建可共享的Semaphore 因此,您可以在理論上創建可以在進程之間共享的自己的Queue 但它涉及很多黑客,可能不是很安全。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM