在Python中,我应该并行运行多少个进程?

在Python中,我应该并行运行多少个进程?,python,multiprocessing,python-3.6,threadpool,python-3.7,Python,Multiprocessing,Python 3.6,Threadpool,Python 3.7,我正在努力处理数以百万计的文件,这些文件是我第一次读入,修改内容,然后写回磁盘的。我有一个线程池,在这里我传递了并行运行的作业数量: pool = mp.Pool(args.num_processes) 我通过了24个CPU核,因为我有24个CPU核 然而,由于我做了很多磁盘IO,从磁盘读取,写入磁盘。我应该增加并行化进程的数量吗 或者,在这种情况下,会出现资源争用,它宁愿减慢速度?这取决于应用程序的执行配置文件。尝试任何详细的评测可能都是不划算的:只需运行一系列实验就可以找到性能的“最佳点”

我正在努力处理数以百万计的文件,这些文件是我第一次读入,修改内容,然后写回磁盘的。我有一个线程池,在这里我传递了并行运行的作业数量:

pool = mp.Pool(args.num_processes)
我通过了24个CPU核,因为我有24个CPU核

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


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

这取决于应用程序的执行配置文件。尝试任何详细的评测可能都是不划算的:只需运行一系列实验就可以找到性能的“最佳点”

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

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


来自
@Steve
的附加评论:

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


如果找到最佳值对您的底线(和/或吞吐量)足够重要,那么您可以通过构建一个系统来确定最佳值,并动态地、连续地进行调整,从而获益。这并不是一件非常困难的事情。

您可以简单地尝试提供最佳性能的进程数量(可能是一小部分文件),因为在IO或CPU成为瓶颈的情况下,很可能会有一个最佳的进程数量(并且添加更多的进程不会再加快代码的速度)。根据存储介质(和文件)的速度和类型,IO可能已经是一个瓶颈≤ 24个进程。我完全同意@luuk-您最好的选择通常是运行比较测试以确定最佳进程数。即使你认为你在CPU、I/O带宽和I/O延迟方面理解了你的应用程序的配置文件,你也会发现你最初的猜测与实际的最佳数字相差甚远。我想知道为什么这个问题被否决了?在提出这个问题之前,我进行了搜索和调查。+1-多年来,我做了很多类似的测试,你经常会对你得出的答案感到惊讶。我建议您可以轻松地重新考虑最佳值,并定期这样做,因为看似微不足道的代码更改有时会对最佳值产生相当大的影响。如果找到最佳值对您的底线(和/或吞吐量)足够重要,那么您可以通过构建一个系统来确定最佳值,并动态地、连续地进行调整,从而获益。“这不是一件非常难做的事。”史蒂夫,我想把所有好主意都写在一个答案里。请你在我的回答中加上这一点(并给自己适当的评价)。或者,写下你自己的答案,把我的观点和你的结合起来。当然。我现在没有时间,但有机会的话我会把我的评论写进你的答案中。或者,你也可以自己做。我不在乎信用。我还热衷于尽可能地给出一个“有趣”的答案。太酷了@Prune!