簡體   English   中英

多處理輸出比單處理慢

[英]Multiprocessing output slower than single process

我正在運行此代碼,似乎使用多進程運行腳本比通過單個進程運行腳本要慢。

難道我做錯了什么?

from time import time
numbers = [(1963309, 2265973), (2030677, 3814172),
           (1551645, 2229620), (2039045, 2020802)]
start = time()
results = list(map(gcd, numbers))
print(results)
end = time()


print('time is %.3f'%(end - start))

from multiprocessing import Pool


if __name__ == '__main__':
    start = time()
    with Pool(4) as p:
      print(p.map(gcd, numbers))
    end = time()
    #print('time is %.3f'%(end - start))
    print('Took %.3f seconds' % (end - start))

輸出是

[1, 1, 5, 1]   # single process
time is 0.444
[1, 1, 5, 1]   #multi-processes
Took 0.751 seconds

謝謝。

這是多處理優勢的一個不好的例子。 很明顯,它會變慢,因為與創建函數相比,您在創建和啟動每個進程上花費了更多時間。 如果您真的有很多耗時的功能,那么明智的選擇是多處理,因此可以將其放在單獨的過程中。

您的時間安排不公平。 list(map(gcd, numbers))是一個進程內操作,不會啟動新進程。

Pool類表示輔助進程池。

從直觀list(map(gcd, numbers))開始新流程要比簡單地執行list(map(gcd, numbers))慢,相對於list(map(...)) ,在Pool有太多事情可以啟動流程。 這幾乎就像比較大象和獵豹的速度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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