asyncio Behaviour Difference 3.6 vs 3.5 (Posting On Python-List Prohibited)

llanitedave llanitedave at birdandflower.com
Sun Jun 11 22:16:24 EDT 2017


On Sunday, June 11, 2017 at 2:42:41 AM UTC-7, Lawrence D’Oliveiro wrote:
> I tried the following very simple script under both versions 3.5.3 and 3.6.1 of Python:
> 
>     import sys
>     import asyncio
> 
>     loop = asyncio.get_event_loop()
> 
>     async def idle() :
>         while True :
>             await asyncio.sleep(1)
>         #end while
>     #end idle
> 
>     loop.create_task(idle())
>     loop.run_forever()
> 
> After it starts running, I hit CTRL/C. Under both versions, I get the usual KeyboardInterrupt exception and traceback. However, under 3.5, I also get this:
> 
>     Task was destroyed but it is pending!
>     task: <Task pending coro=<idle() running at asyncio_loop_forever:14> wait_for=<Future pending cb=[Task._wakeup()]>>
> 
> OK, as near as I can tell from the asyncio docs <https://docs.python.org/3/library/asyncio.html>, it makes sense for this message to appear. Yet it does not come up with 3.6. Was it deemed to be too noisy, and too much trouble to silence, so it was quietly dropped?
> 
> Yet according to the 3.6 release notes <https://docs.python.org/3/whatsnew/3.6.html#asyncio>, the changes to asyncio have been backported to 3.5. So should there be a difference in behaviour between the two?
> 
> I’m running Debian Unstable, so feel free to tell me 3.5.3 is obsolete and there is some later 3.5.x version. ;)


My message in 3.5.3 is somewhat different, running Kubuntu 17.04:

>>> import sys
>>> import asyncio
>>> loop = asyncio.get_event_loop()

>>> async def idle():
...     while True:
...         await asyncio.sleep(1)
...     #end while
... #end idle
... 
>>> loop.create_task(idle())
<Task pending coro=<idle() running at <stdin>:1>>
>>> loop.run_forever()
^CTraceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.5/asyncio/base_events.py", line 421, in run_forever
    self._run_once()
  File "/usr/lib/python3.5/asyncio/base_events.py", line 1388, in _run_once
    event_list = self._selector.select(timeout)
  File "/usr/lib/python3.5/selectors.py", line 445, in select
    fd_event_list = self._epoll.poll(timeout, max_ev)
KeyboardInterrupt
As yu can see, I get the  "Task pending coro=<idle()" messsage BEFORE I input the last line of instructions, and it comes from stdin.  Different terminals, perhaps?



More information about the Python-list mailing list