适用于Windows和Linux的python多重处理与线程绑定
收藏

因此,我敲了一些测试代码,以了解与线程相比,多处理模块如何在cpu绑定工作上扩展。在linux上,我获得了预期的性能提升:

linux(双四核xeon):
serialrun用了1192.319毫秒
parallelrun花了346.727毫秒
threadedrun花了2108.172毫秒

我的双核Macbook Pro表现出相同的行为:

osx(双核Macbook Pro)
serialrun用了2026.995毫秒
parallelrun花了1288.723毫秒
threadedrun用了5314.822毫秒

然后,我在Windows机器上进行了尝试,并得到了非常不同的结果。

Windows(i7 920):
serialrun用了1043.000毫秒
parallelrun用了3237.000毫秒
threadedrun花了2343.000毫秒

为什么哦,为什么在Windows上多处理方法这么慢?

这是测试代码:

#!/ usr / bin / env python

导入多处理
导入线程
导入时间

def print_timing(func):
    def包装器(* arg):
        t1 = time.time()
        res = func(* arg)
        t2 = time.time()
        打印'%s用了%0.3f ms'%(func.func_name,(t2-t1)* 1000.0)
        返回资源
    返回包装


def counter():
    对于我在xrange(1000000)中:
        通过

@print_timing
def serialrun(x):
    对于我在xrange(x)中:
        计数器()

@print_timing
def parallelrun(x):
    proclist = []
    对于我在xrange(x)中:
        p = multiprocessing.Process(目标=计数器)
        proclist.append(p)
        p.start()

    对于我在proclist中:
        我加入()

@print_timing
def threadedrun(x):
    线程列表= []
    对于我在xrange(x)中:
        t = threading.Thread(目标=计数器)
        threadlist.append(t)
        t.start()

    对于我在线程列表中:
        我加入()

def main():
    serialrun(50)
    平行运行(50)
    螺纹运行(50)

如果__name__ =='__main__':
    主要()

最佳答案

在UNIX变体下,过程轻巧得多。 Windows进程很繁琐,需要花费更多的时间来启动。推荐使用线程在Windows上进行多处理。

    公众号
    关注公众号订阅更多技术干货!