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 <rep...@bugs.python.org>
<http://bugs.python.org/issue29432>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to