多处理与单处理的性能

时间:2013-10-02 20:14:22

标签: python performance multiprocessing

我对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)

1 个答案:

答案 0 :(得分:3)

multiprocessing相关联的开销可能高于问题中单个任务所消耗的时间,但如果你有更大的任务,这个开销(通常与酸洗Python对象相关)将成比例地变小使用多处理将是有利的。