Hi,
here's a little generator benchmark:
======================
def cgen(a,b):
while 1:
yield a+b
d = {}
exec '''
def pygen(a,b):
while 1:
yield a+b
''' in d
pygen = d['pygen']
def repeat_gen(gen, int count):
cdef int i
for i in range(count):
next(gen)
try:
gen.throw(GeneratorExit)
except GeneratorExit:
pass
======================
timeit gives me this in Py3.2:
$ python3 -m timeit -s 'from genbench import repeat_gen, cgen, pygen'
'repeat_gen(pygen(1,2), 10000)'
1000 loops, best of 3: 827 usec per loop
$ python3 -m timeit -s 'from genbench import repeat_gen, cgen, pygen'
'repeat_gen(cgen(1,2), 10000)'
1000 loops, best of 3: 271 usec per loop
And here's another one where we add Cython's looping advantage:
======================
def cgen(a,b):
cdef int i
for i in range(a):
yield b
d = {}
exec '''
def pygen(a,b):
for i in range(a):
yield b
''' in d
pygen = d['pygen']
def repeat_gen(gen):
for _ in gen:
pass
======================
$ python3 -m timeit -s 'from genbench import repeat_gen, cgen, pygen'
'repeat_gen(pygen(10000, 2))'
1000 loops, best of 3: 881 usec per loop
$ python3 -m timeit -s 'from genbench import repeat_gen, cgen, pygen'
'repeat_gen(cgen(10000, 2))'
10000 loops, best of 3: 116 usec per loop
That's not too bad for a start.
Stefan
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev