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块来捕获该异常并在任务取消时执行特定的逻辑。
