python - Python Concurrent.futures CPU 使用率查询
问题描述
在 Python 中使用 concurrent.futures 处理大型数据集( 9x200,000x4 np.floats )时,我注意到一开始 CPU 使用率很低(13% ~ 相当于使用了 1 个核心)。然而,过了一会儿,它达到了我对多处理的期望(80-90%)。如果有兴趣,这是我的代码片段。
sections = np.arange(0,9,1)
section_result = []
sectioned_results = []
if __name__ == "__main__":
plt.close()
with concurrent.futures.ProcessPoolExecutor() as executor:
generatorlist = [executor.map(makeimage,sections) for _ in range(num_particles)]
for generator in generatorlist:
for item in generator:
section_result.append(item)
有谁知道这样做的目的?随着我的粒子数量增加,这 1 个核心做某事所需的时间似乎呈指数增长。我的第一个想法是内存分配,因为我预计此运行将占用大约 1-1.5GB,但 python 文档中似乎没有关于此过程的任何内容,我想知道我是否错误地实现了该模块。我已经在相对较低的数据集(10,000 - 100,000)上对此进行了测试,并且肯定看到使用 1 个核心的持续时间有所增加。
非常感谢
一个
解决方案
这完全取决于您的程序实际在做什么。例如,如果您在子进程中运行的所有内容都是 a,while True: pass
那么我希望您会立即看到您的使用率上升到 100%。
例如,任何 IO 绑定操作(从磁盘读取、等待 API 响应)都会导致您在程序等待该操作的结果时看到低 CPU 使用率。
推荐阅读
- c++ - 为我的 QGraphicsScene 中的元素添加悬停/进入/离开功能
- python - macOS High Sierra 上的 XGBoost 并行化问题
- android - 如何使用已在 when 表达式中初始化的变量?
- bash - 将 bash 命令的输出重定向到脚本
- ag-grid - npm install 后无法引用 html2pdf
- sql - 如何在 Oracle 数据库中获取更多列值以及不同的列?
- java - 使用 @JsonPropperty 提取具有相同前缀的键的值列表
- java - 使用休眠将一个对象保存在多个其他对象中
- firefox - 在 Firefox 中调试美化的 Js - Quantum
- postgresql - Postgresql 转轴