0

我试图在 PyDev 中使用多处理模块的组件上工作,但是在运行代码时遇到问题,会在操作系统中产生 100 多个 python 进程并杀死我的机器。我有我的代码调用run()而不是start(),它运行良好(当然,除了它都是单线程的,因为start()它实际上产生了进程),所以这向我表明我的代码至少没有做任何疯狂的事情,比如无限生成过程什么的。此外,我整理了一些测试代码来看看发生了什么:

from multiprocessing import Process
import time

def create_processes(num_processes, method, *args):

    processes = []
    for i in range(num_processes):
        processes.append(Process(target=method, args=args))
    return processes

def start_all(processes, stagger):

    for process in processes:
        process.start()
        if stagger:
            time.sleep(stagger)

processes = create_processes(2, time.sleep, 4)
start_all(processes, 0)

当我在 cli 中运行它时,它工作正常;它产生 2 个在超时后结束的新进程。但是,当我在 PyDev 中运行它时,它会生成大约 600 个进程(或者至少这是我的机器无响应之前任务管理器显示的数量)。我做了一点调试,它似乎在Process.start()上线self._popen = Popen(self)

我做了一些搜索,但找不到任何似乎相关的东西。CLI 是否自动join()将所有start()ed 进程分配给某个单独的管理器以保持控制?我的代码中是否需要一个线程来处理我的join()所有进程?PyDev 是否​​在尝试维护日志记录和控制?有其他事情发生吗?

4

1 回答 1

3

如果这是代码的起点,您应该将最后两行包装起来if __name__ == '__main__',以防止子进程启动自己的子进程:

if __name__ == '__main__':
    processes = create_processes(2, time.sleep, 4)
    start_all(processes, 0)
于 2012-06-28T19:49:37.963 回答