Python,多进程模块,Process类,启动方法失败?启动无尽的解释器 :|
这段代码启动了无数个进程,结果导致我的电脑崩溃。
import multiprocessing
def f(process_name):
print process_name, 'says hi'
p1 = multiprocessing.Process(None,f,'1',('1st',))
p1.start()
在控制台上,我看到“第一个说你好”一直在重复,而在任务管理器里,我看到有成千上万的解释器在启动——我是在PyDev的Eclipse里运行的,也是在命令行里运行的,结果都是一样。
还有一个结果是,只有一个Python解释器在运行(不过它很快就死掉,然后又会迅速生成另一个),所以我在任务管理器里无法结束它(显示句柄无效)。不过它却占用了100%的处理器。
我对Java的线程API很熟悉,而模块multiprocessing声称它的接口和线程模块很像,实际上是Java的一个复制品。
为什么这些进程不结束?我缺少什么才能让它只启动一个线程,打印出内容然后结束呢?
谢谢你们,你们真棒!
2 个回答
8
你需要把你的初始化代码放在一个 if __name__ == "__main__":
的代码块里。
在Python中,当你启动一个新的解释器时,它会再次执行你的 __main__
模块。任何没有放在这个结构里的代码都会再次执行。这就会造成你看到的效果。