New submission from Timm Wagener <wagenert...@gmail.com>:
It seems like the future subclass returned by asyncio.gather() (_GatheringFuture) can never return True for future.cancelled() even after it's cancel() has been invoked successfully (returning True) and an await on it actually raised a CancelledError. This is in contrast to the behavior of normal Futures and it seems generally to be classified as a minor bug by developers. * Stackoverflow Post: https://stackoverflow.com/questions/61942306/asyncio-gather-task-cancelled-is-false-after-task-cancel * Github snippet: https://gist.github.com/timmwagener/dfed038dc2081c8b5a770e175ba3756b I have created a fix and will create a PR. It seemed rather easy to fix and the asyncio test suite still succeeds. So maybe this is a minor bug, whose fix has no backward-compatibility consequences. However, my understanding is that asyncio.gather() is scheduled for deprecation, so maybe changes in this area are on halt anyways!? ---- # excerpt from snippet async def main(): """Cancel a gather() future and child and return it.""" task_child = ensure_future(sleep(1.0)) future_gather = gather(task_child) future_gather.cancel() try: await future_gather except CancelledError: pass return future_gather, task_child # run future_gather, task_child = run(main()) # log gather state logger.info(future_gather.cancelled()) # False / UNEXPECTED / ASSUMED BUG logger.info(future_gather.done()) # True logger.info(future_gather.exception()) # CancelledError logger.info(future_gather._state) # FINISHED # log child state logger.info(task_child.cancelled()) # True logger.info(task_child.done()) # True # logger.info(task_child.exception()) Raises because _state is CANCELLED logger.info(task_child._state) # CANCELLED ---------- components: asyncio messages: 370855 nosy: asvetlov, timmwagener, yselivanov priority: normal severity: normal status: open title: asyncio.gather() cancelled() always False type: enhancement versions: Python 3.8 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue40894> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com