On Mon, Mar 31, 2014 at 6:03 PM, Lars Andersson <[email protected]> wrote:
> > Ok, I see. Maybe the stop function should raise an exception if called on > a loop that is not running? > I think it's too late for that, it already has assigned semantics in that case. To understand those, look at the code for stop(): http://code.google.com/p/tulip/source/browse/asyncio/base_events.py#210 . > > Calling async.sleep(0) to flush remaining callbacks on a loop about to be > closed works for me now, > Yeah, I think that's skating on thin ice. :-) > but maybe something like > > loop.flush() > > that runs the loop and calls all remaining callbacks() would be more clear. > I recommend that you try to restructure your program a little bit and then you won't have this problem at all. Have you looked at some of the examples in the Tulip example directory? http://code.google.com/p/tulip/source/browse/examples/ But you can probably implement flush() yourself as follows: loop.stop() loop.run_forever() > Or, to avoid bloating the API, why not let loop.run_until_complete() > accept an empty argument list and behave in the same way? > > Anyway, thanks for the clarification. Adding something along the lines of > what you just wrote to the module docs would probably make it less likely > to be misunderstood. > I'm sorry the docs didn't guide you in the right direction. Unfortunately I don't see the blind spots in the docs any more since I already know what the library does. :-( I'll try to think of a way to improve them based on your feedback. > > > Den tisdagen den 1:e april 2014 kl. 11:28:51 UTC+11 skrev Guido van Rossum: >> >> I think there may be some ambiguity in the wording. :-( >> >> The intention is that you should call stop() from *inside* the loop, i.e. >> when it is already running. It seems you interpreted the docs to mean that >> stop() itself runs the remaining callbacks. That is not the case -- it >> merely tells a running loop to stop. >> >> How could we have made this clearer in the docs? >> >> >> On Mon, Mar 31, 2014 at 4:55 PM, Lars Andersson <[email protected]> wrote: >> >>> Hi, >>> >>> I'm a bit confused by the behaviour of loop.stop() >>> >>> The asyncio docs states that: >>> >>> "Every callback scheduled before >>> stop()<https://docs.python.org/dev/library/asyncio-eventloop.html#asyncio.BaseEventLoop.stop> >>> is >>> called will run." >>> >>> Still, when running asyncio from python3.4 on OS X 10.9.2, the following >>> program does not end up calling the callback() function: >>> >>> import asyncio >>> >>> def callback(): >>> print("CALLBACK CALLED") >>> >>> loop = asyncio.get_event_loop() >>> loop.call_soon(callback) >>> #loop.run_until_complete(asyncio.sleep(0)) >>> loop.stop() >>> >>> >>> Uncommenting the line calling asyncio.sleep(0) seems to fix the problem, >>> and the callback is actually called. Is this expected behaviour? >>> >>> >> >> >> -- >> --Guido van Rossum (python.org/~guido) >> > -- --Guido van Rossum (python.org/~guido)
