簡體   English   中英

Python:Joblib中的並行處理使代碼運行更加緩慢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM