擅长:python、mysql、java
<p>现在可以了,我通过将Padraic解决方案从类变量更改为实例变量来实现</p>
<pre><code>from multiprocessing import Process, Lock, Value
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(object):
#hello = Value("i",lock=True) # create shared variable of type int
#hello.value = 0
def __init__(self):
self.lock=Lock()
self.hello=Value("i",0)
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):
with self.lock: # acquire lock
self.hello.value += 1
print ("update from", i)
# release lock
if __name__=='__main__':
dr=driver()
dr.run()
print(dr.hello.value)
</code></pre>