欢迎访问宙启技术站
智能推送

Python中常见的异步任务取消异常:CancelledError()异常解析

发布时间:2023-12-24 12:35:04

在Python中,异步任务通常使用协程或异步函数来实现。在异步任务执行期间,有时候可能需要主动取消任务,例如用户操作取消或任务执行时间过长等情况。在这些情况下,会引发CancelledError()异常。

CancelledError()异常是Python的内置异常之一。它表示一个异步任务被取消。当任务被取消时,正在执行的任务会引发CancelledError()异常,中止任务的执行。

下面是一个简单的例子,演示如何使用asyncio库来执行异步任务并取消任务:

import asyncio

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

async def main():
    t = asyncio.create_task(task())
    await asyncio.sleep(5)
    t.cancel()
    await asyncio.sleep(3)

asyncio.run(main())

在上面的代码中,我们定义了一个异步任务task(),在该任务中我们使用了一个无限循环来模拟一个长时间运行的任务。同时,我们还添加了一个try-except块来捕获CancelledError()异常,并在任务被取消时打印一条消息。

main()函数中,我们首先使用asyncio.create_task()函数创建了一个任务t,然后等待5秒钟,之后我们调用t.cancel()来取消任务。最后再等待3秒钟,以确保我们能观察到任务被取消后的输出。

当程序运行时,我们可以看到任务在每秒钟打印一次"Running...",然后在任务被取消后输出"Task has been cancelled."。

注意,当我们取消异步任务时,将触发CancelledError()异常,但这并不意味着该异常一定会被捕获。如果我们未使用try-except块来捕获CancelledError()异常,它将向上冒泡,直到被最外层的事件循环处理并导致程序退出。

总结来说,CancelledError()异常是Python中用于表示取消异步任务的异常。我们可以使用try-except块来捕获该异常并在任务取消时执行特定的逻辑。