多线程性能开销
基本上,我创建了一个程序,用来往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实现,比如IronPython和Jython。