@motya88

Как добавлять данные в список при использовании multiprocessing?

Пытаюсь разобраться в multiprocessing. По итогу выполнения скрипта необходимо увидеть список ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten']. Но у меня он пустой. Подскажите, как в данном случае нужно использовать manager?
Ниже код моего примера:
from multiprocessing import Pool

final_list = []

def get_inf(data):
    for item in data:
        final_list.append(item)
        print(final_list)

def main():
    a = [('one', 'two', 'three', 'four', 'five'), ('six', 'seven', 'eight', 'nine', 'ten')]


    with Pool(3) as p:
        p.map(get_inf, a)
    print(final_list)

if __name__ == '__main__':
    main()
  • Вопрос задан
  • 128 просмотров
Решения вопроса 1
@motya88 Автор вопроса
У меня получилось решить задачу вот так.
from multiprocessing import Pool, Manager

def init_processes(l):
    global final_list
    final_list = l


def get_inf(data):
    for item in data:
        final_list.append(item)

def main():
    manager = Manager()
    final_list = manager.list()

    a = [('one', 'two', 'three', 'four', 'five'), ('six', 'seven', 'eight', 'nine', 'ten')]
    with Pool(3, initializer=init_processes, initargs=(final_list,)) as p:
        p.map(get_inf, a)
    print(final_list)

if __name__ == '__main__':
    main()
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
1HAWK1
@1HAWK1
Для работы с потоками советую использовать заготовку (брал на каком-то сайте):
import time
from threading import Thread
def sleepMe(i):

    print("Поток %i засыпает на 5 секунд.\n" % i)
    time.sleep(5)
    print("Поток %i сейчас проснулся.\n" % i)

for i in range(10):
    th = Thread(target=sleepMe, args=(i, ))
    th.start()
Ответ написан
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Как вам уже правильно подсказали в комментариях, не нужно использовать глобальный переменные. Функция get_inf должна возвращать результат, а функция main объединять результаты в один список.
Ответ написан
@Vindicar
В multiprocessing есть класс Queue, используйте его.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы