代码之家  ›  专栏  ›  技术社区  ›  Corey Goldberg

多处理启动太多Python VM实例

  •  14
  • Corey Goldberg  · 技术社区  · 16 年前

    我正在编写一些多处理代码(Python2.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()
    
    3 回复  |  直到 16 年前
        1
  •  23
  •   Peter Hansen    16 年前

    看起来您没有认真遵循文档中的指导原则,特别是 this section

    您需要使用 if __name__ == '__main__':

        2
  •  0
  •   Ross Rogers    16 年前

    当我在Linux和python2.6一起运行时,我看到最多有4个python2.6进程,我不能保证它们都来自这个进程。他们肯定没有给机器加满油。

    需要新的python版本吗?Linux/Windows的区别?

        3
  •  0
  •   Heikki Toivonen    16 年前

    您确定没有cron或其他东西启动脚本的多个副本吗?或者生成的脚本没有调用任何会启动新实例的内容,例如,如果代码直接在导入时运行,则作为导入的副作用?