2017-09-30 17 views
-1

我們已經有一些函數被調用由runInParallel您將在此找到答案使用的並行處理:https://stackoverflow.com/a/7207336/720484在Python中進行多處理時,全局變量是否會在每個進程中被複制?

所有這些功能都應該有機會獲得他們應該讀一個單一的全局變量。
這個全局變量實際上是一個類的實例。這個實例包含一個成員變量/屬性,並且所有進程都可以讀寫它。

但是事情並不是這樣發生的。對象(類實例)似乎被複制,並且其屬性在每個進程中都是獨立的。所以如果一個進程改變了這個值,這對另一個進程的變量是不可見的。

這是預期的行爲?

如何克服它?

謝謝

+0

downvoting without explanation is equal to欺凌 –

回答

3

所有子進程將繼承該實例從父進程分叉的時刻。在fork之後,不會在子級和父級中對實例進行任何更改。

這就是Linux中進程的工作原理 - 每個進程都有自己的內存,並且受到其他進程的保護(除非您有意共享它)。它不是Python特定的。

一般來說,你要找的是IPC(進程間通信)。流程可以通過多種方式與彼此進行交流。您可能想要使用管道或共享內存。

在Python中,請閱讀:https://docs.python.org/2/library/multiprocessing.html#sharing-state-between-processes

相關問題