用于设备的Python多进程

时间:2013-09-03 09:21:43

标签: python multiprocessing

我在一定数量的“设备”上并行化我的代码时遇到问题。 所以,让我们简要介绍一下python伪代码:

from multiprocessing import Process, Pool
device_nums=dirty_way_to_get_the_number_of_devices() #an integer number
pool = Pool(processes=device_nums)    # device_nums worker processes
results=[]
parameters=range(100)
g=0
for i in parameters:
  results.append( pool.apply_async(a_certain_fancy_simulation, (i, g%device_nums)) )
  g+=1
pool.close()
pool.join()

设备可以是“GPU”,“个人电脑”,“服务器”,无论它是什么,“a_certain_fancy_simulation” 当它具有“g”数字(0到n)时,请注意将当前参数重定向到设备“g”。 问题是“a_certain_fancy_simulation”的运行时间可能与“i”到“i”真的不同。

我的代码出了什么问题? 假设我们有4个设备(device_nums = 4),它们都开始了。 因此,设备0的i = 0。设备1具有i = 1,i = 2 i = 2,dev 3 i = 3。 假设设备“3”比其他设备早得多。 现在发生的是设备0得到i = 4来计算(并且它仍在计算i = 0)并且设备3是空闲的。

我想要的是让所有设备一直忙碌的方法。 可能未充分优化的解决方案可能是拥有不同的池并划分“参数” 同样在这些“池”中,但在这种情况下,某个池可能完成 当其他设备仍在计算他们的池时,其他设备比其他设备更早。

有关如何解决此问题的任何建议吗?

0 个答案:

没有答案