Закрытие недоступно в функции обратного вызова в многопроцессорной - PullRequest
0 голосов
/ 24 октября 2018

Я хотел собрать результат с каждого задания в многопроцессорной среде.Вот игрушечный код:

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 глобальной переменной.Но мой вопрос: почему я не могу сделать такую ​​функцию закрытия, чтобы суммировать результаты от заданий?

...