我目前正在重新設計一個程序來使用Python的多處理池。我的第一印象是執行時間增加而不是減少。因此,我得到了好奇,並寫了一個小測試腳本:Python多處理池執行時間與非多處理執行時間相比
import time
import multiprocessing
def simple(x):
return 2*x
def less_simple(x):
b = x
for i in range(0, 100):
b = b * i
return 2*x
a = list(range(0,1000000))
print("without multiprocessing:")
before = time.time()
res = map(simple, a)
after = time.time()
print(str(after - before))
print("-----")
print("with multiprocessing:")
for i in range(1, 5):
before = time.time()
with multiprocessing.Pool(processes=i) as pool:
pool.map(simple, a)
after = time.time()
print(str(i) + " processes: " + str(after - before))
我得到如下結果:
無多處理: 2.384185791015625e-06
與多:
1處理:0.35068225860595703
2處理:0.21297240257263184
3工序:0.21887946128845215
4處理:0.3474385738372803
當我在線21和31 less_simple更換簡單,我得到以下的結果:
無多處理: 2.6226043701171875e-06
with multiprocessing:
1進程:3.1453816890716553
個2工序:1.615351676940918
3工序:1.6125438213348389
4個過程:1.5159809589385986
老實說,我有點困惑,因爲非多版本總是幅度的一些訂單快。另外,進程號的增加似乎對運行時沒有影響。因此,我有幾個問題:
- 我是否在使用多處理時犯了一些錯誤?
- 我的測試功能是否簡單以獲得多處理的積極影響?
- 有沒有機會估計多處理在哪一點上有優勢,還是我必須測試它?
對於小的任務產生新進程將大於時間的成本花在做工作。而且首先也不需要它。 – jonatan
你的測試功能太簡單了。產生過程和傳遞輸入和結果相對於實際計算而言過於昂貴。 – timakro