python - 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 分钟后,只有一两个实际执行我的代码!
生成器继续产生要处理的对象,我知道这是因为一两个进程确实保持活动状态,继续处理它们,所以任务队列不为空
查看“顶部”列表中剩余两个下的接下来的几个进程,它们都最多占用 2% 的 CPU,所以它不像有其他一些大型任务占用我的处理能力......可能是什么继续?
我不确定每个进程是否完成一项任务并退出,或者退出前的几个,不太知道如何检查这个..
解决方案
推荐阅读
- macos - make: *** 没有规则来制作目标 - gfortran
- javascript - 从 HTML 文本的开头剥离所有 br 标记,直到下一个元素是文本节点 Javascript 或 jQuery
- javafx - 通过单击其他 fxml 中的按钮清除 tableview
- java - 内存泄漏将 lambda 提交到带有复制列表的线程
- javascript - 在页面重新加载时保留多个元素的切换状态
- javascript - Javascript - 拒绝从 URL 执行脚本,因为它的 MIME 类型 ('application/json') 不可执行,并且启用了严格的 MIME 类型检查
- python - 从所有列表中获取唯一值(Python API 请求)
- google-chrome - 如何在 Linux Chrome 和 Firefox 上信任自签名 localhost 证书
- android - Android - 安装和启动时将数据从链接传递到应用程序
- sql-server - 允许通过触发器更新列,但防止直接更新同一列