New submission from Roman Skurikhin <romasku...@gmail.com>:
In https://bugs.python.org/issue40607 asyncio.wait_for behavior was changed so it propagates exceptions that happened during cancellation. But it still raises `TimeoutError` if cancelation ends with some value being returned. In the following example value `42` is lost: import asyncio async def return_42_on_cancel(): try: await asyncio.sleep(20) except asyncio.CancelledError: return 42 # `return` is useless in this block. async def main(): try: await asyncio.wait_for(return_42_on_cancel(), timeout=1) except asyncio.TimeoutError: print('Timeout') asyncio.run(main()) I think it's better to either: 1) Return that value from `asyncio.wait_for`. The motivation here is that if the task returns something, we shouldn't conceal it. I also searched through GitHub and found some places where others catch `CancelledError` and return value (https://github.com/grpc/grpc/blob/44fb37c99f2853cc23f04fba15468980d9e28e41/src/python/grpcio/grpc/experimental/aio/_interceptor.py#L328). It can also be used with some coroutines developed to be wrapped with `wait_for`, for example suppose the following equation solving function: async def solve_iteratively(initial_x, next_approximation): result = initial_x try: while True: result = next_approximation(result) await asyncio.sleep(0) except asyncio.CancelledError: return result It allows us to control its execution time using asyncio.wait_for. 2) Add some warning about the value is thrown away (in debug mode) and document it somewhere. === I am a newbie here, so sorry if it is wrong to create such "proposal" issues. ---------- components: asyncio messages: 369278 nosy: Roman Skurikhin, asvetlov, yselivanov priority: normal severity: normal status: open title: asyncio.wait_for: process future result produced during cancelation type: enhancement versions: Python 3.9 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue40672> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com