首页 > 解决方案 > 在 Python 中,我应该并行运行多少个进程?

问题描述

我正在处理我首先读入的数百万个文件,修改内容然后将其写回磁盘。我有一个线程池,我可以在其中传递应该并行运行的作业数量:

pool = mp.Pool(args.num_processes)

我通过了 24,因为我有 24 个 CPU 内核。

但是,由于我做了很多磁盘 IO,从磁盘读取,写入磁盘。我应该增加要并行化的进程数吗?

或者在那种情况下会有资源争用,它宁愿放慢速度?

标签: pythonmultiprocessingpython-3.6threadpoolpython-3.7

解决方案


这取决于您的应用程序的执行配置文件。尝试任何详细的分析可能并不值得:只需运行一系列实验来为您的表现找到“最佳位置”。

从人为的低数字开始,例如 16。尝试从 24 到偶数,使用您选择的任何指标来衡量您的表现。当您以这种方式确定相对最大值时,请尝试任一侧的奇数以找到最佳拟合。

这是系统中的常用技术。我的团队这样做是为了训练深度学习模型。我们发现我们需要为典型的操作系统操作保留 10% 以上的空闲处理器:模型 I/O 和其他资源维护。


来自的附加评论@Steve

这些年来我做了很多这样的测试,你经常会对你想出的答案感到惊讶。我建议您可以轻松地重新考虑最佳数字,并定期这样做,因为看似微不足道的代码更改有时会相当大地改变最佳值。

如果找到最佳值对您的底线(美元和/或吞吐量)足够重要,那么您将受益于构建一个确定最佳值并动态且连续地对其进行调整的系统。这并不是一件非常困难的事情。


推荐阅读