我试图在 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 是否在尝试维护日志记录和控制?有其他事情发生吗?