对于下面的代码,我希望dr.hello
的输出是10,因为10个派生进程调用updateHello
一次,以增加dr.hello
。但现在是0,原因是什么?我该如何改变它?你知道吗
from multiprocessing import Process, Lock
class myWorker:
def __init__(self, lock, driver, i):
self.idx=i
self.driver=driver
self.lock=lock
def run(self):
self.driver.updateHello(self.lock,self.idx)
class driver:
hello=0
def __init__(self):
self.lock=Lock()
def workerrun(self,lock, i):
worker1=myWorker(lock,self,i)
worker1.run()
def run(self):
D=[Process(target=self.workerrun,args=(self.lock,i)) for i in range(10)]
for d in D:
d.start()
for d in D:
d.join()
def updateHello(self,l,i):
l.acquire()
self.hello+=1
print "update from",i
l.release()
if __name__=='__main__':
dr=driver()
dr.run()
print dr.hello
现在可以了,我通过将Padraic解决方案从类变量更改为实例变量来实现
我认为共享变量需要一个multiprocessing.Value
Ipython输出:
相关问题 更多 >
编程相关推荐