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