2017-03-07 30 views
1

我知道multiprocessing.Manager()以及如何使用它來創建共享對象。特別是可以在工人之間分享的隊列。有這個question,這個question,和這個questionPython多處理:RuntimeError:「隊列對象只能通過繼承在進程之間共享」

但是,這些鏈接沒有提到爲什麼我們可以使用繼承來共享進程。據我所知,在這種情況下,隊列仍然只能被複制。

+2

您是否想到「繼承」的錯誤含義?他們正在討論繼承自產生它們的進程的隊列的進程,而不是'class Child(Parent)'OOP繼承。 – user2357112

回答

1

在Python中Queue實現依賴系統pipe上一個過程的數據傳輸到另一有的semaphores保護讀取並在此pipe寫。

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

由於這兩個子對象一般不能共享,所以Queue不能被醃漬並在啓動後發送到子過程。

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

相關問題