【问题标题】:In Python how many process should I run in parallel? [closed]在 Python 中,我应该并行运行多少个进程? [关闭]
【发布时间】:2021-04-27 10:34:51
【问题描述】:

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

pool = mp.Pool(args.num_processes)

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

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

或者在这种情况下会出现资源争用,宁愿放慢速度?

【问题讨论】:

  • 您可以简单地试验提供最佳性能的进程数(可能使用一小部分文件),因为很可能会有一个最佳进程数,其中 IO 或 CPU 成为瓶颈(并且添加更多进程不会再加速您的代码)。根据存储介质(和文件)的速度和类型,IO 可能已经成为 ≤ 24 个进程的瓶颈。
  • 我完全同意@luuk - 您最好的选择通常是运行比较测试以确定最佳进程数。即使您认为自己了解应用在 CPU、I/O 带宽和 I/O 延迟方面的配置文件,您也会经常发现您最初的猜测与实际的最佳数字相差甚远。
  • 我想知道为什么这个问题被否决了?在创建此问题之前,我进行了搜索和调查。

标签: python multiprocessing python-3.6 threadpool python-3.7


【解决方案1】:

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

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

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


来自@Steve的补充评论:

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

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

【讨论】:

  • +1 - 这些年来我做了很多这样的测试,你经常会对你想出的答案感到惊讶。我建议您可以轻松地重新考虑最佳数字,并定期这样做,因为看似微不足道的代码更改有时会相当大地改变最佳值。如果找到最佳值对您的底线(美元和/或吞吐量)足够重要,那么您将受益于构建一个确定最佳值并动态且持续地对其进行调整的系统。这并不是一件非常困难的事情。
  • @Steve,我想在一个答案中获得所有好的想法。您会将其添加到我的答案中吗(并给自己适当的信任)。或者,写下你自己的答案,将我的观点融入你的观点中。
  • 当然可以。我现在没有时间,但是当我有机会时,我会在您的答案中发表评论。或者,您也可以自己动手。我不在乎信用。我也热衷于让一个答案尽可能“多汁”。
  • 太酷了@Prune!
猜你喜欢
  • 1970-01-01
  • 2019-05-26
  • 1970-01-01
  • 2013-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多