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调用或计算密集型任务,您可能会发现任务在取消信号到达之后仍然运行一段时间,直到操作完成。

相关内容

热门资讯

八分钟实锤!德扑之星猫腻(手机... 八分钟实锤!德扑之星猫腻(手机德州)好像是有挂(详细辅助技巧教程)1、德扑之星猫腻系统规律教程、德扑...
1分钟实锤!德扑ai助手(云扑... 1分钟实锤!德扑ai助手(云扑克德州)原来有挂(详细辅助AA德州教程)1)德扑ai助手辅助挂:进一步...
第六分钟实锤!德扑起手牌胜率图... 第六分钟实锤!德扑起手牌胜率图(德州扑克)原来存在有挂(详细辅助切实教程);1、上手简单,内置详细流...
七分钟实锤!德扑之星ai代打(... 七分钟实锤!德扑之星ai代打(线上wpk德州)好像真的有挂(详细辅助2025新版技巧)1、不需要AI...
三分钟实锤!智星德州菠萝开挂(... 三分钟实锤!智星德州菠萝开挂(德州wepower)一直是有挂(详细辅助2025新版教程)1、用户打开...
第八分钟实锤!智星德州菠萝外挂... 第八分钟实锤!智星德州菠萝外挂(德州wpk)切实存在有挂(详细辅助扑克教程)1、第八分钟实锤!智星德...
三分钟实锤!德州之星辅助(德州... 三分钟实锤!德州之星辅助(德州nzt)其实真的有挂(详细辅助科技教程)1、德州之星辅助透视辅助简单,...
九分钟实锤!德扑数据软件(wp... 九分钟实锤!德扑数据软件(wpk德州)原来真的有挂(详细辅助系统教程)1、德扑数据软件系统规律教程、...
第五分钟实锤!德州之星辅助(德... 第五分钟实锤!德州之星辅助(德州机器人)真是是有挂(详细辅助攻略教程)1、德州之星辅助ai辅助优化,...
1分钟实锤!德扑之星有猫腻(德... 1分钟实锤!德扑之星有猫腻(德州之星)果然是有挂(详细辅助高科技教程)1、每一步都需要思考,不同水平...