在我的python3多进程程序中,我需要一个全局变量COUNT
进行计数。我使用Manager.Lock()维护全局变量COUNT
,以防止在子进程写入此变量时发生冲突。
以下是我的代码实现;
# Ubuntu 16.04 LTS, python 3.6
from multiprocessing import Pool, Lock, Manager
COUNT = 0
def f(lock,x):
global COUNT
with lock:
COUNT += x
print(COUNT,end=' ')
if __name__ == '__main__':
manager = Manager()
lock = manager.Lock()
print('Origin COUNT:',COUNT)
print('COUNT in child-process:',end=' ')
with Pool(4) as pool:
for i in [2,4,6,8,10]:
pool.apply(func=f,args=(lock,i))
pool.close()
pool.join()
print()
print('Final COUNT:',COUNT)
# result
Origin COUNT: 0
COUNT in child-process: 6 4 8 2 12
Final COUNT: 0
很明显:
COUNT
上运行。 COUNT
的操作未全部保存。(为什么?)最终COUNT为0 ???结果不应该是30吗? (sum([2,4,6,8,10])
)
这真的让我感到困惑。 Lock()失败?