在 Python 中使用多处理模块时如何确保每个进程使用大致相同的时间?

How to make sure each process uses roughly same amount of time when using multiprocessing module in Python?

目前我正在使用 Python 多处理模块开发异步梯度算法,主要思想是我 运行 多个进程异步更新全局参数数组。我已经完成了大部分框架,但我遇到了一个问题,即某些进程有时似乎 "get stuck" 而其他进程仍在 运行ning,这导致该算法效率较低。所以我想知道是否有好的方法可以确保它们使用的时间大致相同?

谢谢!

这几乎完全取决于您尝试解决的问题。如果你把一个大任务分配给几个worker,而其中一个莫名其妙地得到了比其他worker大得多的chunk,就会出现这种情况。

有几种方法可以避免它:

  1. 尝试更准确地估算每个块的工作量。根据您的任务,这可能是可行的。应拆分预测工作量最大的块。
  2. 一种非常常见的方法是将任务分成许多非常小的块,比现有的工作人员要多得多。然后将所有块放入队列中,让您的工作人员从队列中吃掉他们的块。这样,当一个工作人员收到一个简单的块时,它会快速完成它并立即从队列中取出下一个块,从而不会在其他工作人员似乎 "stuck" 处理他们更难的块时结束空闲。

当然,任何方法都无法解决真正的死锁。