私は単純なマルチプロセッシングテストをしていますが、何か問題があるようです。私はこれをi5-6200Uで実行しています。2.3 Ghz with Turbo BoostPythonマルチプロセッシング - 実行時間が長くなりました。何が間違っていますか?
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 ---
ヘルプははるかに高く評価されます。
プロセスの作成は、2つの小さな整数を掛けるよりもはるかに高価です。あなたがCPUを悪化させるよりもはるかに多くのプロセスを作ります(すべてのプロセスは、限られたCPUサイクルの間に互いに戦います)。スピードアップを確認するには、各ワーカープロセスで実行される「有益な作業」が重要です(プロセスの作成+破壊やIPC(プロセス間通信)のオーバーヘッドよりも時間がかかります)。 –
なぜ400プロセスを作成し、乗算値をキューに格納するのですか? – haifzhan
これを正しくするにはどうすればいいですか?あなたは私を正しい資源に導くことができますか?私はプールや何かを使っているべきですか?私は本当に混乱しています。私はプロセスの結果を得る必要があるので、値をキューに格納する必要があります。グーグルでは、キューはそれを行う方法と思われました。 – RandN88