[Python-ideas] micro-threading PEP proposal (long) -- take 2!

Mathias Panzenböck grosser.meister.morti at gmx.net
Fri Aug 29 15:09:28 CEST 2008


Bruce Frederiksen schrieb:
>
> I'm working on another project that uses generators a _lot_ and there
> are problems there because 'for' loops don't call 'close' on generators
> to clean things up.  I've also hit problems where the code works fine on
> CPython, but fails on jython and ironpython because I'm relying on the
> reference counting to immediately collect abandoned generators and run
> their 'finally' clauses.
>

You can use "with closing" to ensure this. However, it bloats the code a tiny bit.

from __future__ import with_statement
from itertools  import islice
from contextlib import closing

def gen():
	try:
		print "before"
		yield 1
		print "between"
		yield 2
		print "after"
	except GeneratorExit:
		print "exit"
	finally:
		print "finally"

>>> with closing(gen()) as g:
...	for x in islice(g,1):
...		print x
...	
before
1
exit
finally



More information about the Python-ideas mailing list