Python,多进程模块,Process类,启动方法失败?启动无尽的解释器 :|

2 投票
2 回答
921 浏览
提问于 2025-04-17 15:49

这段代码启动了无数个进程,结果导致我的电脑崩溃。

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 个回答

0

我认为,进程不会自己结束,直到你用 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()

不过在更大的程序中,我不建议这样做,因为可能会引发一些问题。想了解更多,可以查看 这里。我还建议你去看看 这个文档

8

你需要把你的初始化代码放在一个 if __name__ == "__main__": 的代码块里。

在Python中,当你启动一个新的解释器时,它会再次执行你的 __main__ 模块。任何没有放在这个结构里的代码都会再次执行。这就会造成你看到的效果。

撰写回答