Python多处理不断地生成pythonw.exe进程,而不进行任何实际工作

lj8*_*888 15 python windows process multiprocessing

我不明白为什么这个简单的代码

# file: mp.py
from multiprocessing import Process
import sys

def func(x):
    print 'works ', x + 2
    sys.stdout.flush()

p = Process(target= func, args= (2, ))
p.start()
p.join()
p.terminate()
print 'done'
sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)

连续创建"pythonw.exe"进程并且它不会打印任何内容,即使我从命令行运行它:

python mp.py
Run Code Online (Sandbox Code Playgroud)

我在Windows 7上运行最新的Python 2.6 32位和64位

Dav*_*ebb 32

您需要使用保护程序的入口点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()
Run Code Online (Sandbox Code Playgroud)