Python ProcessPoolExecutor进程在完成所有任务之前退出

2024-09-27 17:55:03 发布

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

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

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

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

我在一台有很多内核的服务器上运行我的代码,因此有大量的工作人员

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

def callObj(obj):
    obj()

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

  • 生成器继续生成要处理的对象,我知道这一点,因为一个或两个保持活动状态的进程会继续处理它们,所以任务队列不是空的

  • 看看“前两个”列表中剩下的两个进程下面的几个进程,它们最多占用2%的CPU,所以不像有其他大型任务夺走了我的处理能力。。。会发生什么事

  • 我不确定每个流程是否完成一项任务并退出,或者在退出前退出几项,我不知道如何检查这一点


Tags: 数据对象方法代码obj终端map进程

热门问题