2017-12-18 56 views
0

我正在做一些類的任務,它通過迭代器產生多個進程來確保每個入口被處理一次。代碼是這樣的:如何在Python中使類成員進程安全

import multiprocessing as mp 

Class MyClass(): 
    def __init__(): 
     self.index=[blabla] 
     self.iterator=0 
     self.workers=[mp.Process(target=self.worker, args=(self.lock, args) for i in range(10)] 
    def worker(self, lock, args): 
     # I intend to use lock to make only one subprocs read index 
     # list until iterator goes to next 
     while some_condition: 
      lock.acquire() 
      now_item=self.index[self.iterator] 
      self._next_iter() 
      lock.release() 
      ...# do something on now_item 
    def._next_iter(self): 
     #do some checks and +1 on iterator 

但似乎所有的子進程開始在迭代器= 0,並做自己的循環。 我知道可以將它們與Queue()對象同步,但如果我們不使用它,該怎麼辦?

回答

0

進程之間不共享內存。因此,應用於流程內變量的更改不會傳播給兄弟。

要在Python中的進程間共享變量,您可以看看multiprocessing模塊提供的基元。在你的具體情況下,shared value應該就足夠了。

相關問題