所以基本上我创建了这个程序,为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_THREADSset ot得到这个10:
NUM_THREADS
10
real 0m32.642s user 0m22.953s sys 0m11.473s
为什么我的程序在有 更多 线程的情况下运行 速度较慢 ? __
我正在运行Linux Ubuntu 11.04和Python 2.7.1。
结果取决于Python的实现,cpython的GIL阻止了并行计算比顺序计算更快。
考虑使用该multiprocessing模块,该模块在其自己的Python进程中执行每个线程,或者使用其他非GIL的Python实现,例如IronPython和Jython。
multiprocessing