多进程类不在实际进程中存储数据

时间:2016-04-27 21:59:27

标签: multiprocessing python-multiprocessing

我已经编写了一个更大的代码片段的例子。我想要多个进程来管理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: []

1 个答案:

答案 0 :(得分:0)

当您创建一个新进程时,子进程将继承父进程的内存,但它有自己的副本。

因此,另一个进程的更改将无法显示。

要在流程中共享数据,最推荐的方法是使用Queue

在您的情况下,您可能需要查看how to share data within processes。请注意,与通过队列或管道同步进程相比,这有点棘手。