Author Roman Skurikhin
Recipients Roman Skurikhin, asvetlov, yselivanov
Date 2020-05-12.11:33:06
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1589283187.27.0.827786043193.issue40607@roundup.psfhosted.org>
In-reply-to
Content
In https://bugs.python.org/issue32751 asyncio.wait_for behaviour was changed that when we use timeout=... and the timeout expires, it waits until task is canceled. However, in some cases inner task can trigger exception while it handles cancellation. Check the following code:


import asyncio


async def ignore_cancel_and_raise():
    try:
        await asyncio.sleep(20)
    except asyncio.CancelledError:
        raise Exception('Cancellation failed')


async def main():
    try:
        await asyncio.wait_for(ignore_cancel_and_raise(), timeout=1)
    except asyncio.TimeoutError:
        print('Timeout')

asyncio.run(main())


It will print "Timeout" and log a warning that "Task exception was never retrieved".

I think that in case inner task cancelation fails with some error, asyncio.wait_for should reraise it instead of silently losing it.
History
Date User Action Args
2020-05-12 11:33:07Roman Skurikhinsetrecipients: + Roman Skurikhin, asvetlov, yselivanov
2020-05-12 11:33:07Roman Skurikhinsetmessageid: <1589283187.27.0.827786043193.issue40607@roundup.psfhosted.org>
2020-05-12 11:33:07Roman Skurikhinlinkissue40607 messages
2020-05-12 11:33:06Roman Skurikhincreate