单次呼叫多处理.Process.start()在PyD中运行时,在Windows中生成100个进程

2024-06-16 12:25:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图开发一个使用PyDev中的多处理模块的组件,但是遇到了这样的问题:运行代码会在操作系统中产生100个python进程,并导致我的机器死机。我的代码调用是run(),而不是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中运行它时,它工作得很好;它产生了两个新进程,它们在超时之后结束。但是,当我在PyDev中运行它时,它会生成大约600个进程(或者至少是在我的机器没有响应之前,taskmanager显示了多少个进程)。我做了一些调试,它似乎在Process.start()self._popen = Popen(self)线上爆炸。在

我四处找了一下,但找不到任何相关的东西。CLI是否会自动将所有join()的进程start()分配给某个单独的管理器以保持控制?我的代码中是否需要一个线程来join()我的所有进程?PyDev是不是在忙着维护日志记录和控制?还有什么事吗?在


Tags: 代码import机器time进程defcreateargs
1条回答
网友
1楼 · 发布于 2024-06-16 12:25:07

如果这是代码的起点,则应在最后两行用if __name__ == '__main__'换行,以防止子进程启动自己的子进程:

if __name__ == '__main__':
    processes = create_processes(2, time.sleep, 4)
    start_all(processes, 0)

相关问题 更多 >