当前位置: 首页 > 面试题库 >

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

阙庆
2023-03-14
问题内容

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

linux(双四核至强):
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上进行多处理。



 类似资料:
  • 我有一个图像路径列表,我想在进程或线程之间划分,以便每个进程处理列表的某些部分。处理包括从磁盘加载图像,进行一些计算并返回结果。我正在使用Python 2.7 下面是我如何创建辅助进程 我所面临的问题是,当我在initializer函数中记录初始化时间时,我知道worker不是并行初始化的,而是每个worker都以5秒的间隔初始化,下面是供参考的日志 我尝试过使用将同时启动辅助线程 我知道Wind

  • 问题内容: 如果对某些人来说这太简单了,我感到抱歉,但是我仍然不了解python的多处理技巧。我已经阅读了 http://docs.python.org/dev/library/multiprocessing http://pymotw.com/2/multiprocessing/basics.html 以及Google给我的许多其他教程和示例…其中许多从这里也是。 好吧,我的情况是我必须计算许多

  • 问题内容: 这段代码在linux上执行,但是抛出AttributeError:类型对象“ T”在Windows上没有属性“ val”,为什么? 问题答案: Windows缺少系统调用,该系统调用重复了当前过程。这有很多含义,包括Windows多处理文档页面上列出的含义。进一步来说: 请记住,如果在子进程中运行的代码尝试访问全局变量,则它看到的值(如果有)可能与调用Process.start时父进程

  • 问题内容: 在效率和代码清晰性方面,决定使用线程或多处理时应遵循哪些良好准则? 问题答案: 线程和多处理之间的许多差异并不是真正针对Python的,某些差异特定于某个Python实现。 对于CPython,在以下情况下,我都将使用该模块: 由于性能原因,我需要同时使用多个内核。使用线程时,全局解释器锁(GIL)将阻止任何加速。(无论如何,有时在这种情况下您都可以避免使用线程,例如,当主要工作是在通

  • 我正在尝试用Python编写一个程序。我想写的是一个脚本,它会立即向用户返回一条友好的消息,但会在后台生成一个长的子进程,它会处理几个不同的文件,并将它们写入一个祖父文件。我已经做了一些关于线程和处理的教程,但我遇到的是,无论我尝试什么,程序都会一直等待,直到子进程完成,然后才会向用户显示前面提到的友好消息。以下是我尝试过的: 线程示例: 我读过这些关于多线程的SO帖子如何在Python中使用线程

  • 问题内容: 我发现在Python 3.4中,用于多处理/线程的库很少:多处理vs线程与asyncio。 但是我不知道使用哪个,或者是“推荐的”。他们做的是同一件事还是不同?如果是这样,则将哪一个用于什么?我想编写一个在计算机上使用多核的程序。但是我不知道我应该学习哪个图书馆。 问题答案: 它们旨在(略有)不同的目的和/或要求。CPython(典型的主线Python实现)仍然具有全局解释器锁,因此多