下面是代码,理论上应该是启动进程,通过锁改变全局变量glob(应该是20)。但实际上glob变量最后并没有变化,就好像退出函数时值没有保存一样:
glob = 10
def printer(item, lock):
global glob
lock.acquire()
try:
glob = glob + 10
print('proc {0} var {1}'.format(item,glob))
finally:
lock.release()
lock = Lock()
for i in range(1):
p = Process(target=printer, args=(i, lock))
p.start()
p.join()
print(glob)
要将状态从一个进程传递到另一个进程,请使用multiprocessing.Manager 、 multiprocessing.Value 或 multiprocessing.Array
只需在以这种方式启动子项之前声明变量,一切都将通过 sharedmem 进行。
还有一个内置的锁