为什么子进程无法在python中访问其数据

时间:2012-03-10 16:29:59

标签: python multiprocessing

输出是这样的,很奇怪,正如我在run函数中所想的那样,它也应该输出列表数据
列表运行[]
附加清单[1]
列表运行[]
附加清单[1,2]
列表运行[] 附加清单[1,2,3]
列表运行[]
附加清单[1,2,3,4]
列表运行[]
追加清单[1,2,3,4,5]

from multiprocessing import Process

class A(Process):

    def __init__(self):
        Process.__init__(self)
        self.list = []

    def append_list(self, item):
        self.list.append(item)
        print 'append list', self.list

    def run(self):
        while True:
            print 'list running', self.list
            import time
            time.sleep(2)
a = A()
a.start()

i = 0
while True:
    i+=1
    import time
    time.sleep(2)
    a.append_list(i)

1 个答案:

答案 0 :(得分:2)

您在进程类上调用函数这一事实并不意味着它在子进程中运行。

创建A对象时,列表位于主进程中。当你在它上面运行start()时,列表会被复制到子进程(嗯,不完全是这样,但为了简单起见,我们假设它)。然后,当父进程调用该函数时,您将附加到仅在父进程的内存中的列表。孩子中的那个,即使它具有相同的名称,现在属于不同的python进程。

如果要在进程之间共享状态,则需要使用共享内存对象或队列对象。看到这里:

http://docs.python.org/library/multiprocessing.html#sharing-state-between-processes