В Windows модуль multiprocessing
импортирует модуль __main__
при порождении нового процесса.Если код, который порождает новый процесс, не заключен в блок if __name__ == '__main__'
, то импорт основного модуля снова вызовет новый процесс.И так до бесконечности.
Эта проблема также упоминается в многопроцессорной документации в разделе, озаглавленном «Безопасный импорт основного модуля». Там вы найдете следующий простой пример:
Запуск этого в Windows:
from multiprocessing import Process
def foo():
print 'hello'
p = Process(target=foo)
p.start()
приводит к RuntimeError
.
И исправление должно использовать:
if __name__ == '__main__':
p = Process(target=foo)
p.start()