首页 > 解决方案 > 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 个核心的持续时间有所增加。

非常感谢

一个

标签: pythonconcurrencycpuconcurrent.futuresprocess-pool

解决方案


这完全取决于您的程序实际在做什么。例如,如果您在子进程中运行的所有内容都是 a,while True: pass那么我希望您会立即看到您的使用率上升到 100%。

例如,任何 IO 绑定操作(从磁盘读取、等待 API 响应)都会导致您在程序等待该操作的结果时看到低 CPU 使用率。


推荐阅读