gpt4 book ai didi

python - 多处理启动太多 Python VM 实例

转载 作者:太空狗 更新时间:2023-10-29 17:16:23 26 4
gpt4 key购买 nike

我正在编写一些多处理代码(Python 2.6.4、WinXP)来生成进程以运行后台任务。在尝试一些微不足道的示例时,我遇到了一个问题,即我的代码只是不断地生成新进程,即使我只告诉它生成一个固定数量。

程序本身运行良好,但如果我查看 Windows 任务管理器,我会不断看到新的“python.exe”进程出现。随着程序的运行,它们只会越来越多地产生(最终让我的机器饿死)。


例如,
我希望下面的代码启动 2 个 python.exe 进程。第一个是程序本身,第二个是它产生的子进程。知道我做错了什么吗?

import time
import multiprocessing


class Agent(multiprocessing.Process):
def __init__(self, i):
multiprocessing.Process.__init__(self)
self.i = i

def run(self):
while True:
print 'hello from %i' % self.i
time.sleep(1)


agent = Agent(1)
agent.start()

最佳答案

看起来您没有仔细遵循文档中的指南,特别是 this section它谈到“主模块的安全导入”。

您需要使用 if __name__ == '__main__': block 来保护您的启动代码,否则我相信您会得到您所得到的。

我认为这归结为多处理模块无法像在 Linux 上那样使用 os.fork(),其中已经运行的进程基本上被克隆到内存中。在 Windows 上(没有这样的 fork()),它必须运行一个新的 Python 解释器并告诉它导入你的主模块,然后在完成后执行启动/运行方法。如果您有“模块级别”的代码,不受名称检查的保护,那么在导入过程中它会重新开始整个序列,无穷无尽

关于python - 多处理启动太多 Python VM 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1923706/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com