我想要創建一個函數,該函數在給定函數和相對參數列表的情況下,儘可能多地啓動進程以並行化這些任務。正在運行的進程數量不能超過我的CPU的核心數量。當一個過程完成時,它應該被另一個替換,直到結束。在多個CPU環境中並行處理大量函數
我試圖用python Pools來實現這樣的事情。這是我的功能:
from multiprocessing import Pool, cpu_count
CPUS = cpu_count()
def parallelize(functions, args):
results = []
if CPUS > 1:
for i in xrange(0, len(functions), CPUS):
pool = Pool()
for j in xrange(CPUS):
if i + j >= len(functions):
break
results.append(pool.apply_async(functions[i + j], args = args[i + j]))
pool.close()
pool.join()
map(lambda x: x.get(), results)
else:
for i in xrange(len(functions)):
results.append(functions[i](*args[i]))
return results
此實現細分批量函數列表。每個批量維度都等於實際CPU的數量。問題在於,它實際上一直等到每個批量的功能完成,然後再次啓動另一批量的過程。
我不想要這種行爲,因爲如果在批量中有一個非常慢的函數,其他cpus將在開始新進程之前等待它完成。
什麼是正確的方法?
@dano'methods'是功能列表。所以'方法[i + j]'是一個函數。它有什麼問題? – ProGM 2014-10-31 14:55:32
啊,對不起。我認爲這是一個切片,出於某種原因。忽略我:) – dano 2014-10-31 14:56:54
好吧沒問題:) – ProGM 2014-10-31 14:57:35