@demegorych

Почему функция не записывает данные в глобальную переменную?

Добрый день у меня есть некоторые проблемы с парсером. Но для упрощения переделал всё в упрощенную версию программы (модель).
from concurrent.futures import ProcessPoolExecutor


def f(arg):
    global mas
    print(arg)
    arg+=1
    mas.append(arg)
    print(mas)


def main():
    global mas
    pool = ProcessPoolExecutor(2)
    for i in range(1, 10):
        pool.submit(f, i)

    pool.shutdown(wait=True)
    print(mas)


if __name__ == "__main__":
    mas = []
    main()

Суть в том, что есть функция, которая добавляет в глобальный массив некоторое значение, притом всё обернуто в многопроцессорность. Проблема в том, что функция по непонятной мне причине ничего не добавляет в этот самый массив. (на выходе выводится пустой массив)

Заранее спасибо!
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
@demegorych Автор вопроса
Ответ в документации - https://docs.python.org/3.9/library/concurrent.fut...
Большое спасибо Dr. Bacon и Vindicar

Итоговый код:
from concurrent.futures import ProcessPoolExecutor


def f(arg):
    arg += 1

    return arg


def main():
    mas = []
    with ProcessPoolExecutor(61) as executor:
        for out in executor.map(f, [1, 2, 3, 4, 5]):
            mas.append(out)
    print(mas)


if __name__ == "__main__":
    main()


где 61, кол-во потоков
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы