输出是这样的,很奇怪,正如我在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)
答案 0 :(得分:2)
您在进程类上调用函数这一事实并不意味着它在子进程中运行。
创建A对象时,列表位于主进程中。当你在它上面运行start()
时,列表会被复制到子进程(嗯,不完全是这样,但为了简单起见,我们假设它)。然后,当父进程调用该函数时,您将附加到仅在父进程的内存中的列表。孩子中的那个,即使它具有相同的名称,现在属于不同的python进程。
如果要在进程之间共享状态,则需要使用共享内存对象或队列对象。看到这里:
http://docs.python.org/library/multiprocessing.html#sharing-state-between-processes