在多处理的回调函数中不提供闭包

时间:2018-10-24 01:49:05

标签: python closures python-multiprocessing

我想从多处理中的每个作业中收集结果。 这是玩具代码:

from multiprocessing.pool import Pool
from random import randint
def main():
    num = 0
    def cb(arg):
        num += arg
    p = Pool(5)
    pp = []
    for i in range(10):
        pp.append(p.apply_async(randint,(1,10),callback=cb))
    for i in range(10):
        pp[i].wait()
    return num
if __name__ == '__main__':
    print(main())

对于每个作业,它将生成一个1到10的随机整数,我使用变量num对其进行汇总。

此代码将引发错误: UnboundLocalError: local variable 'num' referenced before assignment

我知道一种解决方法是使num成为全局变量。但是我的问题是:为什么我不能使用这种关闭功能来总结作业的结果?

0 个答案:

没有答案