我对python很新,我目前正在研究多处理。我创建了一个简单的例子,我认为使用多处理比单一处理要快得多,但事实证明它实际上更慢!该脚本创建并运行一个包含0到999之间整数的列表,将其拆分为工作进程然后运行的较短列表并打印“我是工作者[整数]”。典型的运行时间是适当的。 26秒,而单个进程脚本的速度提高了0.5-1秒。我的多处理脚本速度慢的原因有什么特别的原因吗?或者为什么它是一个用于多处理的坏例子?这两个脚本的代码如下所示
多处理代码:
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)
答案 0 :(得分:3)
与multiprocessing
相关联的开销可能高于问题中单个任务所消耗的时间,但如果你有更大的任务,这个开销(通常与酸洗Python对象相关)将成比例地变小使用多处理将是有利的。