Cor*_*erg 14 python windows multiprocessing
我正在编写一些多处理代码(Python 2.6.4,WinXP),它生成运行后台任务的进程.在玩一些简单的例子时,我遇到了一个问题,我的代码只是不断产生新的进程,即使我只是告诉它产生一个固定的数字.
程序本身运行正常,但如果我查看Windows TaskManager,我会看到新的'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()
Run Code Online (Sandbox Code Playgroud)
Pet*_*sen 20
看起来您没有仔细遵循文档中的指导原则,特别是本节中谈到"安全导入主模块"的部分.
你相信,你需要用if __name__ == '__main__':块来保护你的启动代码,否则你会得到你所得到的.
我相信它归结为多处理模块不能像在Linux上那样使用os.fork(),其中已经运行的进程基本上被克隆在内存中.在Windows(没有这样的fork())上,它必须运行一个新的Python解释器并告诉它导入你的主模块,然后在完成后执行启动/运行方法.如果您的代码位于"模块级别",不受名称检查的保护,那么在导入过程中它会重新启动整个序列,无限制地
| 归档时间: |
|
| 查看次数: |
4856 次 |
| 最近记录: |