Вам нужно защитить затем точку входа в программу, используя if __name__ == '__main__':
.
Это специфическая проблема Windows. В Windows ваш модуль должен быть импортирован в новый интерпретатор Python, чтобы он мог получить доступ к вашему целевому коду. Если вы не остановите этот новый интерпретатор, выполняющий стартовый код, он породит другого потомка, который затем породит другого потомка, пока он не обработает pythonw.exe
, насколько видит глаз.
Другие платформы используют os.fork()
для запуска подпроцессов, поэтому у вас не возникает проблем с повторным импортом модуля.
Итак, ваш код должен выглядеть следующим образом:
from multiprocessing import Process
import sys
def func(x):
print 'works ', x + 2
sys.stdout.flush()
if __name__ == '__main__':
p = Process(target= func, args= (2, ))
p.start()
p.join()
p.terminate()
print 'done'
sys.stdout.flush()