| 1 | import gc |
|---|
| 2 | from itertools import groupby |
|---|
| 3 | from genshi.template.base import Context |
|---|
| 4 | from genshi.template.eval import Expression |
|---|
| 5 | |
|---|
| 6 | expr1 = Expression("iter(groupby(test, key=lambda x: len(x)))") |
|---|
| 7 | |
|---|
| 8 | def run(**data): |
|---|
| 9 | ctxt = Context(**data) |
|---|
| 10 | for i, j in expr1.evaluate(ctxt): |
|---|
| 11 | ctxt['j'] = j |
|---|
| 12 | raise ValueError("bad") |
|---|
| 13 | |
|---|
| 14 | i = 10 |
|---|
| 15 | while i: |
|---|
| 16 | gc.collect() |
|---|
| 17 | num_objects = len(gc.get_objects()) |
|---|
| 18 | try: |
|---|
| 19 | run(test=dict.fromkeys(map(str, range(10, 100))), groupby=groupby) |
|---|
| 20 | except Exception, e: |
|---|
| 21 | print e |
|---|
| 22 | i -= 1 # 2 passes needed for reaching fix-point |
|---|
| 23 | |
|---|
| 24 | # check the memory usage again |
|---|
| 25 | gc.collect() |
|---|
| 26 | print num_objects, len(gc.get_objects()) |
|---|