这段代码启动了无限的进程,随后使我的PC崩溃。
import multiprocessing
def f(process_name):
print process_name, 'says hi'
p1 = multiprocessing.Process(None,f,'1',('1st',))
p1.start()在控制台中,我一次又一次地看到‘from说嗨’,在任务管理器中,我看到一大堆解释器启动了-我在PyDev eclipse内部和命令行中运行了这个命令-相同的结果。
我得到的另一个结果是有一个单独的python解释器在运行(尽管很快就会死掉并产生另一个解释器),所以我不能在任务管理器中终止它(处理无效)。不过,它消耗了100%的处理器。
我习惯了java线程API,模块多进程声称有一个类似于线程模块的接口,它是java的副本。
为什么进程没有死?简单地让它产生一个线程,打印出来,然后消亡,我错过了什么?
Thx,你们说了算!
发布于 2013-02-14 07:25:52
您需要将初始化代码包装在if __name__ == "__main__":块中。
在fork启动新的解释器之后,Python再次执行您的__main__模块。任何不受此构造保护的内容都将再次执行。这就产生了你所看到的效果。
发布于 2013-02-14 07:33:47
我不相信进程会死,除非您用myProcess.exit.set()命令命令它们这样做。我会编辑你的代码,让它看起来像这样:
import multiprocessing
def f(process_name):
print process_name, 'says hi'
p1 = multiprocessing.Process(None,f,'1',('1st',))
p1.start()
p1.exit.set()但我不会在较大的程序中这样做,因为它可能会导致问题。有关这方面的更多信息,请参阅here。我也推荐访问documentation。
https://stackoverflow.com/questions/14865159
复制相似问题