asyncio.wait_for不会传播CancelledError,如果在取消之前等待的future已经“完成”。
创始人
2024-09-21 06:00:58
0

由于asyncio.wait_for函数不会在future已经完成时传播CancelledError,因此需要通过手动取消任务来解决此问题。以下是一个使用asyncio.wait_for函数的示例,其中包括手动取消任务的代码:

import asyncio

async def slow_operation():
    await asyncio.sleep(5)
    return 42

async def main():
    task = asyncio.ensure_future(slow_operation())
    try:
        result = await asyncio.wait_for(task, timeout=3)
        print(result)
    except asyncio.TimeoutError:
        task.cancel()
        await asyncio.wait([task])
        print("Operation cancelled")

asyncio.run(main())

在上述示例中,slow_operation函数表示一个耗时操作。我们使用asyncio.ensure_future将其转换为一个Future对象,然后将其传递给asyncio.wait_for函数。为了在超时发生时取消任务,我们使用try-except语句捕获asyncio.TimeoutError异常,并在异常处理程序中调用task.cancel()。最后,我们使用asyncio.wait函数等待任务完成,并在完成后打印出消息。

请注意,我们需要使用asyncio.run函数来运行主函数。

相关内容

热门资讯

透视插件!aa poker辅助... 透视插件!aa poker辅助(透视)线上教程(2025已更新)(哔哩哔哩);1)aa poker辅...
透视美元局!aapoker插件... 透视美元局!aapoker插件(透视)插件(果然真的有挂);aapoker插件辅助器中分为三种模型:...
透视黑科技!哈糖大菠萝有没有挂... 透视黑科技!哈糖大菠萝有没有挂(透视)黑科技教程(2020已更新)(哔哩哔哩)哈糖大菠萝有没有挂软件...
透视免费!aapoker脚本怎... 透视免费!aapoker脚本怎么用(透视)透视软件(真是是有挂);1)aapoker脚本怎么用辅助挂...
透视肯定!pokemmo脚本手... 透视肯定!pokemmo脚本手机版(透视)揭秘教程(2026已更新)(哔哩哔哩);1、金币登录送、破...
透视科技!aapoker怎么控... 透视科技!aapoker怎么控制牌(透视)辅助(其实有挂);1、每一步都需要思考,不同水平的挑战会更...
透视教程!德州局透视脚本下载安... 透视教程!德州局透视脚本下载安装最新版本(透视)解密教程(2020已更新)(哔哩哔哩)1、不需要AI...
透视有挂!aapoker怎么拿... 透视有挂!aapoker怎么拿好牌(透视)透视脚本入口(原来存在有挂)1、不需要AI权限,帮助你快速...
透视实锤!德州透视脚本(透视)... 透视实锤!德州透视脚本(透视)我来教教你(2023已更新)(哔哩哔哩);1、打开软件启动之后找到中间...
透视辅助!aapoker发牌逻... 透视辅助!aapoker发牌逻辑(透视)透视脚本(一贯存在有挂)1、透视辅助!aapoker发牌逻辑...