为什么多处理工作线程不能更改全局变量?



我有一个全局变量,叫做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,变量按预期设置。这是否意味着工作进程不会以并行方式调用回调函数,因为全局变量在进程之间不可共享。

全局

变量不会在进程之间共享。在一个进程中设置全局只会在该进程中更改全局。

相关内容

  • 没有找到相关文章