[Python-Dev] async/await in Python; v2

Yury Selivanov yselivanov.ml at gmail.com
Thu Apr 23 03:10:52 CEST 2015



On 2015-04-22 9:04 PM, Guido van Rossum wrote:
> On Wed, Apr 22, 2015 at 5:55 PM, Yury Selivanov <yselivanov.ml at gmail.com>
> wrote:
>
>> On 2015-04-22 8:35 PM, Guido van Rossum wrote:
>>
>>> On Wed, Apr 22, 2015 at 5:12 PM, Greg Ewing <greg.ewing at canterbury.ac.nz>
>>> wrote:
>>>
>>>   Guido van Rossum wrote:
>>>>   On Wed, Apr 22, > OTOH I'm still struggling with what you have to do to
>>>>> wrap a coroutine in a Task, the way its done in asyncio by the Task()
>>>>> constructor, the loop.create_task() method, and the async() function
>>>>>
>>>>>   That's easy. You can always use costart() to adapt a cofunction
>>>> for use with something expecting a generator-based coroutine,
>>>> e.g.
>>>>
>>>> codef my_task_func(arg):
>>>>     ...
>>>>
>>>> my_task = Task(costart(my_task_func, arg))
>>>>
>>>> If you're willing to make changes, Task() et al could be made to
>>>> recognise cofunctions and apply costart() where needed.
>>>>
>>> Hm, that feels backwards incompatible (since currently I can write
>>> Task(my_task_func(arg)) and also a step backwards in elegance (having to
>>> pass the args separately).
>>>
>>> OTOH the benefit is that it's much harder to accidentally forget to wait
>>> for a coroutine. And maybe the backward compatibility issue is not really
>>> a
>>> problem because you have to opt in by using codef or async def.
>>>
>>> So I'm still torn. :-)
>>>
>>> Somebody would need to take a mature asyncio app and see how often this is
>>> used (i.e. how many place would require adding costart() as in the above
>>> example).
>>>
>> Somewhere in this thread Victor Stinner wrote:
>>
>> """A huge part of the asyncio module is based on "yield from fut" where
>> fut is a Future object."""
>>
>> So how would we do "await fut" if await requires parentheses?
>>
> We could make Future a valid co-callable object.

So you would have to write 'await fut()'?  This is non-intuitive.
To make Greg's proposal work it'd be a *requirement* for 'await'
(enforced by the grammar!) to have '()' after it.


Yury


More information about the Python-Dev mailing list