Всем привет
Не так давно сел за Питон, впечатляет, но пока попадаются головоломные моменты.
Подскажите, пожалуйста, правильное решение для такой задачи.
Нужно запустить несколько процессов, которые добавляют в список
cards[]
произвольное количество записей.
import time
import os
from multiprocessing import Process, Pool
def add_card(card):
print('*** 1 ***' + str(card))
pid = os.getpid()
card.append( {'id': 7, 'descr': pid})
time.sleep(1)
print('*** 2 ***' + str(card))
return (card,)
if __name__ == '__main__':
cards=[]
cards.append( {'id': 1, 'descr': 'Первый'})
cards.append( {'id': 2, 'descr': 'Второй'})
cards.append( {'id': 3, 'descr': 'Третий'})
cards.append( {'id': 4, 'descr': 'Четвертый'})
cards.append( {'id': 5, 'descr': 'Пятый'})
cards.append( {'id': 6, 'descr': 'Шестой'})
print('*** NEW ***' + str(cards))
#Запускаем 3 процесса, на входе даем список из трех кортежей
(cards,)
with Pool(3) as p:
p.map(add_card, (cards,)*3 )
print('*** FIN ***' + str(cards))
Результат:
*** NEW ***[{'id': 1, 'descr': 'Первый'}, {'id': 2, 'descr': 'Второй'}, {'id': 3, 'descr': 'Третий'}, {'id': 4, 'descr': 'Четвертый'}, {'id': 5, 'descr': 'Пятый'}, {'id': 6, 'descr': 'Шестой'}]
*** 1 ***[{'id': 1, 'descr': 'Первый'}, {'id': 2, 'descr': 'Второй'}, {'id': 3, 'descr': 'Третий'}, {'id': 4, 'descr': 'Четвертый'}, {'id': 5, 'descr': 'Пятый'}, {'id': 6, 'descr': 'Шестой'}]
*** 2 ***[{'id': 1, 'descr': 'Первый'}, {'id': 2, 'descr': 'Второй'}, {'id': 3, 'descr': 'Третий'}, {'id': 4, 'descr': 'Четвертый'}, {'id': 5, 'descr': 'Пятый'}, {'id': 6, 'descr': 'Шестой'}, {'id': 7, 'descr': 15048}]
*** 1 ***[{'id': 1, 'descr': 'Первый'}, {'id': 2, 'descr': 'Второй'}, {'id': 3, 'descr': 'Третий'}, {'id': 4, 'descr': 'Четвертый'}, {'id': 5, 'descr': 'Пятый'}, {'id': 6, 'descr': 'Шестой'}]
*** 2 ***[{'id': 1, 'descr': 'Первый'}, {'id': 2, 'descr': 'Второй'}, {'id': 3, 'descr': 'Третий'}, {'id': 4, 'descr': 'Четвертый'}, {'id': 5, 'descr': 'Пятый'}, {'id': 6, 'descr': 'Шестой'}, {'id': 7, 'descr': 17432}]
*** 1 ***[{'id': 1, 'descr': 'Первый'}, {'id': 2, 'descr': 'Второй'}, {'id': 3, 'descr': 'Третий'}, {'id': 4, 'descr': 'Четвертый'}, {'id': 5, 'descr': 'Пятый'}, {'id': 6, 'descr': 'Шестой'}]
*** 2 ***[{'id': 1, 'descr': 'Первый'}, {'id': 2, 'descr': 'Второй'}, {'id': 3, 'descr': 'Третий'}, {'id': 4, 'descr': 'Четвертый'}, {'id': 5, 'descr': 'Пятый'}, {'id': 6, 'descr': 'Шестой'}, {'id': 7, 'descr': 17732}]
*** FIN ***[{'id': 1, 'descr': 'Первый'}, {'id': 2, 'descr': 'Второй'}, {'id': 3, 'descr': 'Третий'}, {'id': 4, 'descr': 'Четвертый'}, {'id': 5, 'descr': 'Пятый'}, {'id': 6, 'descr': 'Шестой'}]
А хотелось бы чтобы к списку cards в теле запущенных процессов добавлялись новые записи.
Предложите правильную идею плз