"""
This basically shows that base.py#next() and wrap.py#_yield()
consume .6 and 2.4 seconds (where the initial caller is .9)
so, the overhead of the flow module is 3-4x without flow.
"""
from __future__ import generators
from twisted.flow import flow
import time
def nonFlow():
def count(max):
cnt = 0
while cnt < max:
cnt += 1
yield cnt
def middle(max):
sum = 0
itr = 0
for x in count(max*1000):
itr += 1
sum += x
if itr > max:
yield sum
sum = 0
itr = 0
def end(max):
itr = 0
for x in middle(max*10):
itr += 1
if itr > max:
yield x
itr = 0
start = time.time()
for x in end(2):
pass
finish = time.time()
return finish - start
def timeFlow():
def count(max):
cnt = 0
while cnt < max:
cnt += 1
yield cnt
def middle(max):
sum = 0
itr = 0
f = flow.wrap(count(max*1000))
yield f
for x in f:
itr += 1
sum += x
if itr > max:
yield sum
sum = 0
itr = 0
yield f
def end(max):
itr = 0
f = flow.wrap(middle(max*10))
yield f
for x in f:
itr += 1
if itr > max:
yield x
itr = 0
yield f
start = time.time()
for x in flow.Block(end(2)):
pass
finish = time.time()
return finish - start
import profile
profile.run('nonFlow()')
profile.run('timeFlow()')
#print "nonFlow", nonFlow()
#print "timeFlow", timeFlow()
syntax highlighted by Code2HTML, v. 0.9.1