Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import itertools
- import timeit
- def grouper_it(n, iterable):
- it = iter(iterable)
- while True:
- chunk_it = itertools.islice(it, n)
- try:
- first_el = next(chunk_it)
- except StopIteration:
- return
- yield itertools.chain((first_el,), chunk_it)
- def grouper(n, iterable):
- it = iter(iterable)
- while True:
- chunk = tuple(itertools.islice(it, n))
- if not chunk:
- return
- yield chunk
- def dummy_element_consumer(func, n=3, data_size=10000):
- for chunk in func(n, xrange(data_size)):
- for el in chunk:
- dummy = el
- def dummy_chunk_consumer(func, n=3, data_size=10000):
- for chunk in func(n, xrange(data_size)):
- dummy = tuple(chunk)
- for consumer in (dummy_element_consumer, dummy_chunk_consumer):
- print consumer.__name__
- for data_size, npasses in ((100, 10000), (10000, 1000)):
- print ' data_size: %s, passes: %s' % (data_size, npasses)
- for n in (3, 10, 100, 1000):
- print ' grouper ', n, timeit.timeit(lambda : consumer(grouper, n, data_size), number=npasses)
- print ' grouper_it', n, timeit.timeit(lambda : consumer(grouper_it, n, data_size), number=npasses)
- print
- ------------------
- Results:
- dummy_element_consumer
- data_size: 100, passes: 10000
- grouper 3 0.75289614549
- grouper_it 3 0.682097099117
- grouper 10 0.283187205571
- grouper_it 10 0.287213798965
- grouper 100 0.137917801202
- grouper_it 100 0.132218313015
- grouper 1000 0.138246513214
- grouper_it 1000 0.133138039654
- data_size: 10000, passes: 1000
- grouper 3 7.03408728375
- grouper_it 3 6.03008289606
- grouper 10 2.48628471741
- grouper_it 10 2.28650824356
- grouper 100 1.05532127117
- grouper_it 100 0.764705173135
- grouper 1000 0.752920695266
- grouper_it 1000 0.611105924492
- dummy_chunk_consumer
- data_size: 100, passes: 10000
- grouper 3 0.761046326397
- grouper_it 3 1.00031595122
- grouper 10 0.258946700939
- grouper_it 10 0.361995614131
- grouper 100 0.105095489586
- grouper_it 100 0.14534625367
- grouper 1000 0.105786698303
- grouper_it 1000 0.145586671485
- data_size: 10000, passes: 1000
- grouper 3 7.10003329424
- grouper_it 3 9.44492849201
- grouper 10 2.20704193098
- grouper_it 10 3.02586649712
- grouper 100 0.738520806174
- grouper_it 100 0.903916032582
- grouper 1000 0.385726813393
- grouper_it 1000 0.479506690848
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement