多线程性能开销

4 投票
2 回答
7531 浏览
提问于 2025-04-16 20:36

基本上,我创建了一个程序,用来往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。

2 个回答

2

你可以使用 Parallel Python 来实现这个功能。

下面是一个并行求和的例子:

http://www.parallelpython.com/content/view/17/31/#SUM_PRIMES

9

结果取决于Python的实现方式,cpython的全局解释器锁(GIL)会让并行计算的速度不如顺序计算快。

可以考虑使用multiprocessing模块,它会让每个线程在自己的Python进程中运行,或者使用一些不受GIL限制的Python实现,比如IronPythonJython

撰写回答