2016-04-27 93 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。请注意,它比通过队列或管道同步进程稍微棘手。