我有一个全局变量,叫做changed
。在一个简单的多处理环境中,我想根据一个专用工作人员的工作来更改这个全局变量。重现我的输出的一个最小示例是:
import multiprocessing as mp
changed=False
def log_result(result):
global changed
if result==50:
print 'Callback changed'
#changed=True
def change(i):
global changed
if i==51:
print 'changed'
changed=True
print changed
return i
def parallel():
global changed
print 'Start Multiprocessing'
pool = mp.Pool(processes=4)
for i in range(100):
pool.apply_async(change, args = (i,), callback=log_result)
pool.close()
pool.join()
print "Multiprocessing done!"
parallel()
我可以看到,工作线程本身似乎无法更改全局变量,相反,该值仅在工作线程的范围内更改。一旦我取消评论
changed=True
行 在回调函数log_result
,变量按预期设置。这是否意味着工作进程不会以并行方式调用回调函数,因为全局变量在进程之间不可共享。
全局
变量不会在进程之间共享。在一个进程中设置全局只会在该进程中更改全局。