python - 在 Python 中,我应该并行运行多少个进程?
问题描述
我正在处理我首先读入的数百万个文件,修改内容然后将其写回磁盘。我有一个线程池,我可以在其中传递应该并行运行的作业数量:
pool = mp.Pool(args.num_processes)
我通过了 24,因为我有 24 个 CPU 内核。
但是,由于我做了很多磁盘 IO,从磁盘读取,写入磁盘。我应该增加要并行化的进程数吗?
或者在那种情况下会有资源争用,它宁愿放慢速度?
解决方案
这取决于您的应用程序的执行配置文件。尝试任何详细的分析可能并不值得:只需运行一系列实验来为您的表现找到“最佳位置”。
从人为的低数字开始,例如 16。尝试从 24 到偶数,使用您选择的任何指标来衡量您的表现。当您以这种方式确定相对最大值时,请尝试任一侧的奇数以找到最佳拟合。
这是系统中的常用技术。我的团队这样做是为了训练深度学习模型。我们发现我们需要为典型的操作系统操作保留 10% 以上的空闲处理器:模型 I/O 和其他资源维护。
来自的附加评论@Steve
:
这些年来我做了很多这样的测试,你经常会对你想出的答案感到惊讶。我建议您可以轻松地重新考虑最佳数字,并定期这样做,因为看似微不足道的代码更改有时会相当大地改变最佳值。
如果找到最佳值对您的底线(美元和/或吞吐量)足够重要,那么您将受益于构建一个确定最佳值并动态且连续地对其进行调整的系统。这并不是一件非常困难的事情。
推荐阅读
- reactjs - 语义 UI React 侧边栏 OnHide
- css - dygraph 不加载本地 css 文件
- javascript - 如何验证 JavaScript 中的多个复选框选择?
- python - Tensorflow:无法以字节形式获取元素。在模型训练期间
- qt - 如何将多个信号连接到 QT/QML 中的一个插槽?
- javascript - 快速 API 路由
- sql - Oracle Apex 服务器端条件类型 SQL
- binary - 模拟具有特定优势比的重复测量二进制数据
- c# - 如何在仍然引用 NUnit 的同时使我的 Visual Studio 2017 项目不是测试项目
- java - 如何向从 JPanel 创建的 ToolWindow 添加滚动条?