首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python,多处理模块,进程类,启动方法失败?启动无限多的解释器:|

Python,多处理模块,进程类,启动方法失败?启动无限多的解释器:|
EN

Stack Overflow用户
提问于 2013-02-14 07:22:09
回答 2查看 847关注 0票数 2

这段代码启动了无限的进程,随后使我的PC崩溃。

代码语言:javascript
复制
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,你们说了算!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-14 07:25:52

您需要将初始化代码包装在if __name__ == "__main__":块中。

在fork启动新的解释器之后,Python再次执行您的__main__模块。任何不受此构造保护的内容都将再次执行。这就产生了你所看到的效果。

票数 8
EN

Stack Overflow用户

发布于 2013-02-14 07:33:47

我不相信进程会死,除非您用myProcess.exit.set()命令命令它们这样做。我会编辑你的代码,让它看起来像这样:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14865159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档