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

Guido van Rossum guido at python.org
Thu Apr 23 03:04:57 CEST 2015


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.


> I think that the problem of forgetting 'yield from' is a bit exaggerated.
> Yes, I myself forgot 'yield from' once or twice. But that's it, it has
> never happened since.


Maybe, but it *is* a part of everybody's learning curve.

-- 
--Guido van Rossum (python.org/~guido)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20150422/57d71806/attachment.html>


More information about the Python-Dev mailing list