On 05/02/2015 04:18 PM, Arnaud Delobelle wrote: > On 1 May 2015 at 20:59, Guido van Rossum<guido at python.org> wrote: >> >On Fri, May 1, 2015 at 12:49 PM, Ron Adam<ron3200 at gmail.com> wrote: >>> >> >>> >> >>> >>Another useful async function might be... >>> >> >>> >> async def yielding(): >>> >> pass >>> >> >>> >>In a routine is taking very long time, just inserting "await yielding()" >>> >>in the long calculation would let other awaitables run. >>> >> >> >That's really up to the scheduler, and a function like this should be >> >provided by the event loop or scheduler framework you're using. > Really? I was under the impression that 'await yielding()' as defined > above would actually not suspend the coroutine at all, therefore not > giving any opportunity for the scheduler to resume another coroutine, > and I thought I understood the PEP well enough. Does this mean that > somehow "await x" guarantees that the coroutine will suspend at least > once? > > To me the async def above was the equivalent of the following in the > 'yield from' world: > > def yielding(): > return > yield # Just to make it a generator > > Then "yield from yielding()" will not yield at all - which makes its > name rather misleading! It was my understanding that yield from also suspends the current thread, allowing others to run. Of course if it's the only thread, it would not. But maybe I'm misremembering earlier discussions. If it doesn't suspend the current thread, then you need to put scheduler.sleep() calls throughout your co-routines. I think Guido is saying it could be either. Cheers, Ron
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