[Python-Dev] PEP 343 - next steps
Phillip J. Eby
pje at telecommunity.com
Mon Jun 13 18:40:02 CEST 2005
At 10:40 PM 6/13/2005 +1000, Nick Coghlan wrote:
>Hmm, you're right. Also, given implementation of PEP 343, code which
>genuinely has to care about this can do so manually:
>
> with async_exceptions_blocked():
> with critical_resource():
> with async_exceptions_unblocked():
> # Do the real work
>
>This ensures acquisition of the critical resource is not interrupted.
>Even better, the above can be wrapped up in a template and still give
>the desired guarantees:
>
> @stmt_template
> def safe_acquisition(resource):
> with async_exceptions_blocked():
> with resource():
> with async_exceptions_unblocked():
> yield None
>
>
> with safe_acquisition(critical_resource):
> # Do the real work
Ow. My head hurts. :) Seriously, though, wouldn't it make more sense to
put the 'with async_exceptions_blocked()' in the __init__ or __enter__ of
'critical_resource'? Or am I still missing something?
More information about the Python-Dev
mailing list