[英]Python: Parallel Processing in Joblib Makes the Code Run Even Slower
我想集成一個並行處理,以使我的for循環運行得更快。
但是,我注意到這使我的代碼運行速度變慢了。 請參見下面的示例,其中我在隨機整數列表上使用具有簡單函數的joblib
。 請注意, 沒有並行處理,它的運行速度要比使用並行處理的速度快。
對正在發生的事情有什么見解?
def f(x):
return x**x
if __name__ == '__main__':
s = [random.randint(0, 100) for _ in range(0, 10000)]
# without parallel processing
t0 = time.time()
out1 = [f(x) for x in s]
t1 = time.time()
print("without parallel processing: ", t1 - t0)
# with parallel processing
t0 = time.time()
out2 = Parallel(n_jobs=8, batch_size=len(s), backend="threading")(delayed(f)(x) for x in s)
t1 = time.time()
print("with parallel processing: ", t1 - t0)
我得到以下輸出:
without parallel processing: 0.0070569515228271484
with parallel processing: 0.10714387893676758
參數batch_size=len(s)
有效地表示給每個進程一批s作業。 這意味着您創建8個線程,然后將所有工作負載分配給1個線程。
另外,您可能希望增加工作量以具有可衡量的優勢。 我更喜歡使用time.sleep延遲:
def f(x):
time.sleep(0.001)
return x**x
out2 = Parallel(n_jobs=8,
#batch_size=len(s),
backend="threading")(delayed(f)(x) for x in s)
沒有並行處理:11.562264442443848
並行處理:1.412865400314331
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.