Задачи выполняются параллельно.
Однако при этом результаты извлекаются синхронно, т. Е. «Подождите, пока результат1 будет готов, затем подождите, пока результат2 будет готов, ..» и т. Д.
vr = result1.get(timeout=420)
xr = result2.get(timeout=420)
yr = result3.get(timeout=420)
zr = result4.get(timeout=420)
Рассмотрим следующий пример кодагде каждая задача опрашивается асинхронно
from time import sleep
import multiprocessing as mp
pool = mp.Pool(processes=4)
# Create tasks with longer wait first
tasks = {i: pool.apply_async(sleep, [t]) for i, t in enumerate(reversed(range(3)))}
done = set()
# Keep polling until all tasks complete
while len(done) < len(tasks):
for i, t in tasks.items():
# Skip completed tasks
if i in done:
continue
result = None
try:
result = t.get(timeout=0)
except mp.TimeoutError:
pass
else:
print("Task #:{} complete".format(i))
done.add(i)
. Вы можете повторить что-то подобное, как описано выше, или использовать аргумент обратного вызова на apply_async
, чтобы выполнить некоторую обработку автоматически по завершении задачи.