我正试图开发一个使用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是不是在忙着维护日志记录和控制?还有什么事吗?在
如果这是代码的起点,则应在最后两行用
if __name__ == '__main__'
换行,以防止子进程启动自己的子进程:相关问题 更多 >
编程相关推荐