Как исправить остановку многопроцессорного пула Python

#python #python-3.x #python-multiprocessing

#python #python-3.x #python-многопроцессорная обработка

Вопрос:

Я пытаюсь использовать многопроцессорную обработку Python для написания некоторого параллельного кода. К сожалению, похоже, что это вообще не работает, как только код попадает в инициализацию пула. Он отлично работает в режиме отладки, но застревает при нормальной работе, и мне приходится вручную завершать его, чтобы остановить.

Вместо этого я пытался использовать многопроцессорную библиотеку, но безрезультатно. Я несколько дней бродил по Интернету, пытаясь найти что-нибудь, что помогло бы, но безрезультатно.

 from multiprocessing import Pool

def foo(x):
    return x

if __name__ == '__main__':
    print('starting')
    pool = Pool(1)
    print('pool created')
    result = pool.map(foo,[1,2,3])
    print('done mapping')
    print(result)
    pool.close()
    pool.join()
    print('final done')
 

Я ожидал, что результат будет таким:

 starting
pool created
done mapping
[1, 2, 3]
final done
 

Это то, что я получаю, когда запускаю с помощью встроенного отладчика WIng IDE. Когда я запускаю программу в обычном режиме, я получаю следующее:

 starting
 

За которым следует бесконечный цикл, который блокирует меня.
Дайте мне знать, если мне нужно что-нибудь добавить к этому сообщению, это мой первый, и я не привык к этим форумам.

Я использую Windows 10 Education 1803 build 17134.706 на ноутбуке.

Комментарии:

1. Невозможно воспроизвести. Для меня это работает нормально.

2. Какую ОС вы используете? Я добавлю это, но я использую Windows на четырехъядерном ноутбуке.

3. это выглядит довольно стандартным использованием модуля, и я много раз делал подобные вещи в Linux и OSX, поэтому я предполагаю, что это проблема, связанная с конкретной ОС. может быть, попробуйте установить другую версию Python?

4. (просто для подтверждения, я попробовал ваш код на Python 3.7.3 и 2.7.16, и оба были в порядке под Linux)

5. Какая именно версия Python? Вы пробовали запускать его с терминала?