多线程性能开销

4
基本上,我创建了一个将值添加到Redis的程序。目前我的计时如下:
real 0m27.759s
user 0m18.129s
sys  0m5.580s

然而,当我尝试运行多个线程时:

if __name__ == '__main__':
    try:
        for x in range(0, NUM_THREADS):
            Thread(None, startProgram, None,
                   (NUM_HOSTS/NUM_THREADS*x+1,
                    NUM_HOSTS/NUM_THREADS*(x+1))).start()
    except Exception as errtxt:
        print errtxt

当我将NUM_THREADS设置为10时,我得到了这个结果:

real 0m32.642s
user 0m22.953s
sys  0m11.473s

为什么我的程序使用更多线程后运行变慢了?

我在运行Linux Ubuntu 11.04和Python 2.7.1。


3
如果你明确陈述你期望得到的输出结果,那么你可能会得到更好的回应。 - George Cummins
我没有收到任何输入,我的唯一问题是线程。很抱歉我没有提供足够的信息。对我来说,似乎总是足够的。 - Eric Sauer
Python的版本和操作系统也将有助于确定线程在这种特定情况下的行为。 - pokstad
2个回答

9

结果取决于Python实现,cpython的GIL阻止并行计算比顺序计算更快。

考虑使用multiprocessing模块,在其自己的Python进程中执行每个线程,或者使用没有GIL的Python实现,如IronPythonJython


1
嘿,谢谢,已经将其缩短到实际0m13.669秒。 用户0m13.793秒 系统0m3.968秒 - Eric Sauer

2

你可能需要更详细地描述Parallel Python如何避免GIL问题。现在,如果不点击链接,很难看出你的回答是否真正回答了问题。 - Ilmari Karonen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接