Я думаю, что использование Pool
в качестве менеджера контекста (например, with ...
) желательно.Это более новое дополнение к Pool
, и оно позволяет более четко инкапсулировать срок жизни пула.
Следует помнить, что при выходе из диспетчера контекста он завершает работу пула и любой другойтекущие задачи.Это означает, что вы все еще хотите сделать p.join()
в некоторых случаях.В вашем примере это не требуется, поскольку p.map
будет блокировать выполнение до тех пор, пока задача не будет выполнена:
Параллельный эквивалент встроенной функции map () (она поддерживает только один итеративный аргумент).хоть).Он блокируется, пока результат не будет готов.
https://docs.python.org/3.7/library/multiprocessing.html#multiprocessing.pool.Pool.map
Поэтому во втором примере вызовы .join()
и .close()
являются избыточными, поскольку задача имеетзавершено, и никакие другие задачи не будут выполняться.
Однако использование .map_async
сделает .join
полезным:
with Pool() as p:
p.map_async(do_something, range(100))
# Do something else while tasks are running
p.join()