0

我正在运行一些代码来处理各种输入的大量数据,但在执行几分钟后,只剩下 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 分钟后,只有一两个实际执行我的代码!

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

  • 查看“顶部”列表中剩余两个下的接下来的几个进程,它们都最多占用 2% 的 CPU,所以它不像有其他一些大型任务占用我的处理能力......可能是什么继续?

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

4

0 回答 0