2016-04-27 88 views
0

我已經做了我正在寫的一個更大的一段代碼的以下示例。我想要多個進程管理100個左右的線程,這些線程也是類。多進程類沒有在實際進程中存儲數據

我有兩個問題,一個是「添加」方法似乎實際上並沒有添加到新的過程。另一個是即使創建了2,3或4個進程,線程仍然在第一個主進程下啓動。

下面的代碼不顯示線程類,但也許如果你可以幫助解釋爲什麼進程沒有正確添加我可以找出線程部分。

from time import sleep 
import multiprocessing 

class manager(multiprocessing.Process): 

    def __init__(self): 
     multiprocessing.Process.__init__(self) 
     self.symbols_list = [] 

    def run(self): 
     while True: 
      print "Process list: " + str(self.symbols_list) 
      sleep(5) 

    def add(self, symbol): 
     print "adding..." + str(symbol) 
     self.symbols_list.append(symbol) 
     print "after adding: " + str(self.symbols_list) 

if __name__ == "__main__": 
    m = manager() 
    m.start() 
    while True: 
     m.add("xyz") 
     raw_input() 

輸出如下:

adding...xyz 
after adding: ['xyz'] 
Process list: [] 

adding...xyz 
after adding: ['xyz', 'xyz'] 

adding...xyz 
after adding: ['xyz', 'xyz', 'xyz'] 
Process list: [] 

回答

0

當你創建一個新的進程,一個孩子繼承父進程的內存,但它有其自身的副本。

因此,一個進程的更改將不會在另一個進程上顯示。

要共享進程內的數據,最推薦的方法是使用Queue。你可能想看看how to share data within processes。請注意,它比通過隊列或管道同步進程稍微棘手。