Chris Jerdonek added the comment:
I noticed that the future defined by asyncio.gather(sleep) is in a "pending"
state immediately after the asyncio.TimeoutError.
One workaround is to wait for the cancellation to finish:
@asyncio.coroutine
def main():
sleep = asyncio.sleep(0.2)
future = asyncio.gather(sleep)
try:
yield from asyncio.wait_for(future, timeout=0.1)
except asyncio.TimeoutError:
print(f'future: {future}')
try:
yield from future
except asyncio.CancelledError:
print(f'future: {future}')
yield from asyncio.sleep(0.1)
asyncio.get_event_loop().run_until_complete(main())
Outputs:
future: <_GatheringFuture pending>
future: <_GatheringFuture finished exception=CancelledError()>
Another option is to pass return_exceptions=True to gather(). This appears to
make the log messages you were concerned about go away:
future: <_GatheringFuture pending>
----------
nosy: +chris.jerdonek
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue29432>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com