поскольку я в Pool (). imap () зависает, p.imap () завершается - PullRequest
0 голосов
/ 18 декабря 2018

При попытке распараллелить задачу, я попытался сделать следующее:

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!")
...