При попытке распараллелить задачу, я попытался сделать следующее:
for i in multiprocessing.Pool().imap(myfun, range(0,10)):
print("iterating")
print(i)
Все задачи были успешно выполнены, но программа никогда не завершалась, зависая без инструкций.
Затем я попробовал этот явно идентичный вариант
p = multiprocessing.Pool()
for i in p.imap(myfun, range(0,10)):
print(i)
, который, к моему удивлению, успешно завершился.Ниже приведен минимальный рабочий пример такого поведения, реализованный в python 3.7.
Насколько мне известно, не должно быть никакой разницы между multiprocessing.Pool().imap(myfun, range(0,10))
и p.imap(myfun, range(0,10)
после назначения p = multiprocessing.Pool()
, но, похоже, этодокажите, что я не прав.
Почему это происходит?Я не правильно понимаю, как работает multiprocessing.Pool ()?Это известная ошибка, ссылку на которую мне не удалось найти?
Рабочий пример:
#!/usr/bin/env python3.7
import multiprocessing
def myfun(p):
return p
p = multiprocessing.Pool()
for i in p.imap(myfun, range(0,10)):
print(i)
print("DONE!"*50)
for i in multiprocessing.Pool().imap(myfun, range(0,10)):
print("iterating")
print(i)
print("Done!")