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)