New submission from Taras Voinarovskyi <voyn1...@gmail.com>:
Hi, during migration to Python 3.8.6 we encountered a behavior change from previous versions: wait_for ignored the request to cancellation and returned instead. After investigation, it seems to be related to the update in bpo-32751 and is only reproduced if the waited task is finished when cancellation of wait_for happens (code mistakes external CancelledError for a timeout). The following example can reproduce the behavior on both 3.8.6 and 3.9.0 for me: ``` import asyncio async def inner(): return async def with_for_coro(): await asyncio.wait_for(inner(), timeout=100) await asyncio.sleep(1) print('End of with_for_coro. Should not be reached!') async def main(): task = asyncio.create_task(with_for_coro()) await asyncio.sleep(0) assert not task.done() task.cancel() print('Called task.cancel()') await task # -> You would expect a CancelledError to be raised. asyncio.run(main()) ``` Changing the wait time before cancellation slightly will return the correct behavior and CancelledError will be raised. ---------- components: asyncio messages: 379454 nosy: asvetlov, tvoinarovskyi, yselivanov priority: normal severity: normal status: open title: AsyncIO's wait_for can hide cancellation in a rare race condition type: behavior versions: Python 3.10, Python 3.8, Python 3.9 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue42130> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com