[Python-ideas] PEP draft: context variables

Yury Selivanov yselivanov.ml at gmail.com
Fri Oct 13 14:32:10 EDT 2017


On Fri, Oct 13, 2017 at 1:45 PM, Ethan Furman <ethan at stoneleaf.us> wrote:
> On 10/13/2017 09:48 AM, Steve Dower wrote:
>>
>> On 13Oct2017 0941, Yury Selivanov wrote:
>
>
>>> Actually, capturing context at the moment of coroutine creation (in
>>> PEP 550 v1 semantics) will not work at all.  Async context managers
>>> will break.
>>>
>>>     class AC:
>>>         async def __aenter__(self):
>>>              pass
>>>
>>> ^ If the context is captured when coroutines are instantiated,
>>> __aenter__ won't be able to set context variables and thus affect the
>>> code it wraps.  That's why coroutines shouldn't capture context when
>>> created, nor they should isolate context.  It's a job of async Task.
>>
>>
>> Then make __aenter__/__aexit__ when called by "async with" an exception to
>> the normal semantics?
>>
>> It seems simpler to have one specially named and specially called function
>> be special, rather than make the semantics
>> more complicated for all functions.
>

It's not possible to special case __aenter__ and __aexit__ reliably
(supporting wrappers, decorators, and possible side effects).

> +1.  I think that would make it much more usable by those of us who are not
> experts.

I still don't understand what Steve means by "more usable", to be honest.

Yury


More information about the Python-ideas mailing list