This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author Roman Skurikhin
Recipients Roman Skurikhin, asvetlov, yselivanov
Date 2020-05-18.17:23:19
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1589822600.1.0.30867318872.issue40672@roundup.psfhosted.org>
In-reply-to
Content
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.
History
Date User Action Args
2020-05-18 17:23:20Roman Skurikhinsetrecipients: + Roman Skurikhin, asvetlov, yselivanov
2020-05-18 17:23:20Roman Skurikhinsetmessageid: <1589822600.1.0.30867318872.issue40672@roundup.psfhosted.org>
2020-05-18 17:23:20Roman Skurikhinlinkissue40672 messages
2020-05-18 17:23:19Roman Skurikhincreate