Я новичок в многопроцессорности на Python и пытаюсь выяснить, должен ли я использовать Pool или Process для вызова двух функций async. Две функции, которые я выполняю, вызывают завихрения и анализируют информацию в 2 отдельных списках. В зависимости от подключения к Интернету каждая функция может занимать около 4 секунд. Я понимаю, что узкое место находится в соединении с ISP, и многопроцессорность не ускорит его, но было бы неплохо, если бы они оба начали асинхронный запуск. Кроме того, это отличный опыт для меня, чтобы перейти на многопроцессорную обработку python, потому что я буду использовать его более позднее.Процесс обработки или пула Python для того, что я делаю?
Я читал Python multiprocessing.Pool: when to use apply, apply_async or map?, и это было полезно, но у меня были свои вопросы.
Так один способ, которым я мог бы сделать это:
Вопросы у меня есть для этой реализации является: 1) Так как присоединиться блоки до тех пор, пока вызывающий процесс будет завершен ... означает ли этот процесс p1 должен закончить до начала процесса p2? Я всегда понимал, что .join() будет таким же, как pool.apply() и pool.apply_sync(). Get(), когда родительский процесс не может запустить другой процесс (задачу) до тех пор, пока текущий исполняемый файл не будет завершен.
Другой альтернативой было бы что-то вроде:
def foo():
pass
def bar():
pass
pool = Pool(processes=2)
p1 = pool.apply_async(foo)
p1 = pool.apply_async(bar)
Вопросы у меня есть для реализации этого будет: 1) Мне нужен pool.close Do(), pool.join()? 2) Будет ли pool.map() сделать их полностью законченными, прежде чем я смогу получить результаты? И если да, то они все еще бегут асинч? 3) Как pool.apply_async() отличается от выполнения каждого процесса с помощью pool.apply() 4) Как это отличается от предыдущей реализации процессом?
Вы уверены, что процесс p1 должен завершиться до того, как процесс p2 стартует, потому что join()? вывод из http://bpaste.net/show/ruHgFTAAMkN4UT2INPqu/ выглядит как на p2 стартует до завершения p1. – dman
Я имел в виду, что 'p2' будет соединен после завершения' p1'. Извините за недопонимание. Конечно, оба процесса запускаются, как только возвращается 'start()'. –