首页 > 解决方案 > Python ProcessPoolExecutor 进程在完成所有任务之前退出

问题描述

我正在运行一些代码来处理各种输入的大量数据,但在执行几分钟后,只剩下 1 或 2 个进程(当我从终端调用“top”时看到)

更多细节:我有一个主进程加载数据,将其分成组,然后启动进程池执行器并在生成器对象上使用“.map”,该生成器对象为每个进程生成每组数据以处理然后保存。我的多处理代码如下所示:

With ProcessPoolExecutor as EX:
    generator = historicalOB_generator(*load_data(staticPath,dynPaths, date, tGap, writePath)
    list(EX.map(callObj, generator)

我在具有许多内核的服务器上运行我的代码,因此工作人员数量众多。

对于某些上下文,“生成器”产生我定义的类的对象,这些对象包含我希望处理的数据,并包括处理和保存数据的内部方法,这些方法由call dunder 方法调用。callObj 函数实际上只是接收一个对象并调用它:

def callObj(obj):
    obj()

回到问题:我的问题是,一旦加载了数据,并且我从终端调用“top”,顶级进程就会被 Python 进程填满,并且执行速度非常快。但是,活动的 python 进程的数量逐渐下降,直到大约 10-15 分钟后,只有一两个实际执行我的代码!

标签: pythonmultiprocessingremote-serverconcurrent.futuresprocess-pool

解决方案


推荐阅读