Как настроить многопроцессорность Python в Windows - PullRequest
0 голосов
/ 22 декабря 2018

Я использую модуль multiprocessing в Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32.

Я пытаюсь использовать простейший игрушечный код, найденный в Интернете:

from multiprocessing import Process

def foo():
    print('hello')

p = Process(target=foo)
p.start()

Я пробовал с и безif __name__ == "__main__":

Я получаю сообщение об ошибке:

OSError: [Errno 22] Invalid argument: 'C:\\Users\\pboswell003\\PwC_Projects\\anonymize_SAP\\anonymization\\SAP\\<input>'

Я не понимаю, какой должна быть часть <input>, и какой именно файл она пытается открыть.

ОБНОВЛЕНИЕ: я воспользовался советом @ShadowRanger и попытался запустить скрипт.Сейчас я испытываю проблему неспособности отладить происходящее.То есть, похоже, ничего не происходит.Если я добавлю time.sleep(10) к функции, сценарий будет выполнен в то же время, что заставит меня поверить, что рабочие не создаются и не используются.

НОВЫЙ ВОПРОС: Как в интерактивном режиме проверить мой код и увидетьрезультаты рабочих потоков при запуске сценария из интерфейса командной строки?

1 Ответ

0 голосов
/ 22 декабря 2018

Вы, вероятно, делаете это с помощью интерактивного переводчика.

  1. Не делайте этого в Windows (или вообще вообще) с модулем multiprocessing;написать короткий сценарий, использовать его (или использовать потоки, у которых нет проблемы с разветвлением)
  2. Защита if __name__ == '__main__': не является обязательной в Windows;ужасные вещи произойдут без этого.Он должен существовать и защищать от любого запуска Process (в том числе через Pool);Process неохраняемые запуски верхнего уровня - это плохая идея.Это уникальная проблема Windows, потому что симуляция разветвления, используемая в Windows, полагается на эту защиту, чтобы позволить ей повторно инициализировать состояние модуля __main__ в каждом дочернем процессе, имитируя разветвление;если нет охранника, вы в конечном итоге попытаетесь создать больше дочерних процессов потомка, которые создадут больше потомков и т. д. Это бомба, вызывающая процесс, не делайте этого.
...