Я новичок в многопроцессорности на Python и пытаюсь выяснить, должен ли я использовать Pool или Process для вызова двух функций async. Две функции, которые я выполняю, вызывают завихрения и анализируют информацию в 2 отдельных списках. В зависимости от подключения к Интернету каждая функция может занимать около 4 секунд. Я понимаю, что узкое место находится в соединении с ISP, и многопроцессорность не ускорит его, но было бы неплохо, если бы они оба начали асинхронный запуск. Кроме того, это отличный опыт для меня, чтобы перейти на многопроцессорную обработку python, потому что я буду использовать его более позднее.
Я прочитал многопроцессор Python.Pool: когда использовать apply, apply_async или карту?, и это было полезно, но у меня все же были свои вопросы.
Таким образом, один из способов сделать это:
def foo():
pass
def bar():
pass
p1 = Process(target=foo, args=())
p2 = Process(target=bar, args=())
p1.start()
p2.start()
p1.join()
p2.join()
Вопросы, которые у меня есть для этой реализации: 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(), pool.join()? 2) Будет ли pool.map() сделать их полностью законченными, прежде чем я смогу получить результаты? И если да, то они все еще бегут асинч? 3) Как pool.apply_async() отличается от выполнения каждого процесса с помощью pool.apply() 4) Как это отличается от предыдущей реализации процессом?