asyncio.sleep为什么允许任务不被立即取消?
创始人
2024-09-21 05:30:48
0

asyncio.sleep允许任务不被立即取消是因为它返回一个awaitable对象,并将其添加到事件循环的任务队列中,而不是直接在当前任务中执行。因此,即使在取消信号到达之前,awaitable对象也可能已经在事件循环中添加到队列中,等待执行。

下面是一个简单的示例代码,演示了如何使用asyncio.sleep来实现一个任务不被立即取消的情境:

import asyncio

async def task():
    try:
        while True:
            print("Working...")
            await asyncio.sleep(1)
    except asyncio.CancelledError:
        print("Task cancelled")

async def main():
    try:
        t = asyncio.create_task(task())
        await asyncio.sleep(5)  # Wait for 5 seconds
        t.cancel()  # Cancel the task
        await t  # Wait for the task to finish
    except asyncio.CancelledError:
        print("Main task cancelled")

asyncio.run(main())

在此示例中,我们创建了一个名为task的协程函数,在其中使用asyncio.sleep(1)来模拟一些耗时的操作。我们还创建了一个名为main的协程函数,在其中创建了一个任务t,并等待5秒,然后取消该任务。最后,我们使用await t等待任务执行完毕。

当取消信号发送时,我们可以看到“Task cancelled”和“Main task cancelled”消息输出,表明任务已被成功取消。但是,如果您在取消信号到达之前将await asyncio.sleep(1)更改为一些非常耗时的操作,例如执行IO调用或计算密集型任务,您可能会发现任务在取消信号到达之后仍然运行一段时间,直到操作完成。

相关内容

热门资讯

透视实锤(WpK)外挂第一视角... 透视实锤(WpK)外挂第一视角(黑科技)透视挂会被封号(好像存在有挂)辅助器中分为三种模型:软件透明...
黑科技系统(微扑克辅助插件挂)... 黑科技系统(微扑克辅助插件挂)外挂黑科技辅助教程(透视)其实是有挂(黑科技工具)1、下载好微扑克辅助...
黑科技计算(WEPOKE)ai... 黑科技计算(WEPOKE)ai代打逻辑(黑科技)透明黑科技(一贯是有挂)是一款可以让一直输的玩家,快...
黑科技科技(Wepoke辅助器... 黑科技科技(Wepoke辅助器)外挂透明挂辅助挂(透视)一直是有挂(黑科技工具)1、Wepoke辅助...
可靠辅助(微扑克)ai会被检测... 可靠辅助(微扑克)ai会被检测到吗(辅助挂)ai算牌器(本来真的有挂)1. ai辅助创建新账号,点击...
黑科技好牌(智星德州菠萝辅助器... 黑科技好牌(智星德州菠萝辅助器)外挂透明挂辅助助手(透视)都是真的是有挂(黑科技脚本)1、全新机制【...
专业辅助(微扑克)ai机器人(... 专业辅助(微扑克)ai机器人(辅助挂)ai代打(一贯有挂)1、不需要AI权限,帮助你快速的进行计算辅...
黑科技游戏(wpk透视外挂)外... 黑科技游戏(wpk透视外挂)外挂透明挂辅助app(透视)本来有挂(黑科技工具)1、点击下载安装,wp...
黑科技app(WePoke)软... 黑科技app(WePoke)软件透明演示(黑科技)黑科技设备(原来存在有挂)1、超多福利:超高返利,...
黑科技计算(WePoKe透明挂... 黑科技计算(WePoKe透明挂)外挂透视辅助方法(透视)果然有挂(黑科技介绍);1、很好的工具软件,...