python threading效果测试


刚把golang的routine测试了一下,情不自禁转python2.7的threading进行测试。(python3测试结果比python2.7要差一些)

由于python的性能问题,我们把循环降低了2个数量级。

通过测试数据,可以肯定的是python多线程分配到了每个逻辑CPU。但每个逻辑CPU的利用率都很低,怀疑是python多线程中每个时刻只有1个线程在运行,时不时换换CPU而已,所以效率很低,这也是python多线程被大家称为假象的原因。而且线程调度开销过高,多线程明显比单线程耗时高很多。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from threading import Thread
import math,time

def dothings(s,starttime):
    i=0
    while True:
        if i==10000000:break
        d=i*i
        d=math.sqrt(d)
        i+=1
    ti = time.time()
    print "thread %d cost %d seconds."%(s,ti-starttime)

def test(ng):
    starttime=time.time()
    ths=[]
    for i in range(ng):
        th = Thread(target=dothings,args=(i,starttime))
        ths.append(th)
    for th in ths:
        th.start()
    for th in ths:
        th.join()

if __name__=="__main__":
    for i in range(4):
        print "thread %d."%(i+1)
        test(i+1)

thread 1.
thread 0 cost 3 seconds.
thread 2.
thread 0 cost 11 seconds.
thread 1 cost 11 seconds.
thread 3.
thread 2 cost 17 seconds.
thread 0 cost 18 seconds.
thread 1 cost 18 seconds.
thread 4.
thread 0 cost 24 seconds.
thread 1 cost 25 seconds.
thread 3 cost 25 seconds.
thread 2 cost 25 seconds.

 
摘自 python.cn

相关内容

    暂无相关文章

评论关闭