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? 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. Yury
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4