私はPythonにかなり慣れていないので、現在マルチプロセッシングを検討しています。シングルプロセッシングよりマルチプロセッシングの方がかなり速いと思われる簡単な例を作成しましたが、実際には遅いことがわかりました! このスクリプトは、0 から 999 までの整数のリストを作成して実行し、ワーカー プロセスが実行して「I am worker [integer]」と出力する短いリストに分割します。通常の実行時間は約です。26 秒ですが、単一プロセス スクリプトは 0.5 ~ 1 秒高速です。私のマルチプロセッシング スクリプトが遅くなる特定の理由はありますか? または、マルチプロセッシングに使用するのが悪い例である理由は何ですか? 参考までに、2 つのスクリプトのコードを以下に示します。
マルチプロセッシング コード:
import multiprocessing
from datetime import datetime
def f(x):
listagain=[]
for i in x:
listagain.append("I am worker " + str(i))
return listagain
def chunks(l, n):
""" Yield successive n-sized chunks from l.
"""
lister=[]
for i in xrange(0, len(l), n):
lister.append(l[i:i+n])
return lister
if __name__ == '__main__':
startTime=datetime.now()
Pool=multiprocessing.Pool
mylist=list(xrange(10000))
size=10
listlist=[]
listlist=chunks(mylist,size)
workers=4
pool=Pool(processes=workers)
result=pool.map(f,listlist)
pool.close()
pool.join()
print result
print (datetime.now()-startTime)
単一処理コード:
from datetime import datetime
def f(x):
listagain=[]
for i in x:
for j in xrange(0,len(i)):
listagain.append("I am worker " + str(i[j]))
return listagain
def chunks(l, n):
""" Yield successive n-sized chunks from l.
"""
lister=[]
for i in xrange(0, len(l), n):
lister.append(l[i:i+n])
return lister
if __name__ == '__main__':
startTime=datetime.now()
mylist=list(xrange(10000))
size=10
listlist=[]
listlist=chunks(mylist,size)
result=f(listlist)
print result
print (datetime.now()-startTime)