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

时间:2016-11-07 21:01:54

标签: python multiprocessing python-multiprocessing

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

谢谢!

1 个答案:

答案 0 :(得分:1)

这几乎完全取决于您尝试解决的问题。如果你将一个大型任务分配给几个工作人员,并且一个不可预测地获得比其他人大得多的任务,那么你将遇到这种情况。

有几种方法可以避免它:

  1. 尝试更准确地估算每个块的工作量。根据您的任务,这可能是可能的。预测工作量最多的块应该拆分。
  2. 解决这个问题的一种非常常见的方法是将任务分成许多非常小的块,比工作者多得多。然后将所有块提供给队列,让你的工作人员从队列中吃掉他们的块。这样,当一个工人收到一个简单的块时,它将快速完成它并立即从队列中获取下一个块,从而不会结束闲置,而其他工作人员似乎“卡住”他们更难的块。
  3. 任何方法都无法解决真正的僵局。