可爱的 Python:用 Python 生成器实现“轻便线程”:
http://www-900.ibm.com/developerWorks/cn/linux/sdk/python/charm-25/index.shtml
上面提到说:
结果表明,在直接循环的版本运行一次的时间内,轻便线程的版本运行了两次还多一点点 — 也就相当于在上面提到的机器上,轻便线程运行了不到 3 秒,而直接循环运行了超过 6 秒。显然,如果每个工作单元都相当于单个字符串方法调用的两倍、十倍或一百倍,那么所花费的线程开销比例就相应地更小了。
from __future__ import generatorsimport time
TIMES = 100000
def stringops():
for n in xrange(TIMES):
s = "Mary had a little lamb"
s = s.upper()
s = "Mary had a little lamb"
s = s.lower()
s = "Mary had a little lamb"
s = s.replace('a','A')
def scheduler():
for n in xrange(TIMES):
for thread in threads: thread.next()
def upper():
while1:
s = "Mary had a little lamb"
s = s.upper()
yield None
def lower():
while1:
s = "Mary had a little lamb"
s = s.lower()
yield None
def replace():
while1:
s = "Mary had a little lamb"
s = s.replace('a','A')
yield None
if __name__=='__main__':
start = time.clock()
stringops()
looptime = time.clock()-start
print"LOOP TIME:", looptime
global threads
threads.append(upper())
threads.append(lower())
threads.append(replace())
start = time.clock()
scheduler()
threadtime = time.clock()-start
print"THREAD TIME:", threadtime
但是我的试验结果正好相反,轻便线程用了0.6m,而循环用了0.4m.加大TIMES参量后效果更明显.试验证实了我的怀疑,估计是作者或者翻译者写错了.