我正在做一個簡單的多處理測試,看起來有些東西。我在i5-6200U 2.3 GHz的Turbo Boost上運行。Python多重處理 - 執行時間增加了,我做錯了什麼?
from multiprocessing import Process, Queue
import time
def multiply(a,b,que): #add a argument to function for assigning a queue
que.put(a*b) #we're putting return value into queue
if __name__ == '__main__':
queue1 = Queue() #create a queue object
jobs = []
start_time = time.time()
#####PARALLEL####################################
for i in range(0,400):
p = p = Process(target= multiply, args= (5,i,queue1))
jobs.append(p)
p.start()
for j in jobs:
j.join()
print("PARALLEL %s seconds ---" % (time.time() - start_time))
#####SERIAL################################
start_time = time.time()
for i in range(0,400):
multiply(5,i,queue1)
print("SERIAL %s seconds ---" % (time.time() - start_time))
輸出:
PARALLEL 22.12951421737671 seconds ---
SERIAL 0.004009723663330078 seconds ---
幫助深表感謝。
創建一個過程比乘以兩個小整數要昂貴得多;並創造出比CPU更多的進程使CPU變得更糟(所有進程在CPU週期有限的情況下相互爭奪)。要看到任何加速,每個工作進程中完成的「有用的工作」必須是非平凡的(需要更多的時間,而不是進程創建+銷燬和IPC(進程間通信)的開銷)。 –
爲什麼要創建400個進程並將乘積值存儲到隊列中? – haifzhan
我該如何正確地做到這一點呢?你能指點我正確的資源嗎?我應該使用游泳池還是什麼?我很困惑。我需要將這些值存儲到隊列中,因爲我需要獲取該進程的結果,並且通過Google搜索,排隊似乎成爲了做到這一點的方式。 – RandN88