Pythonasync/await中的CancelledError()异常的识别和处理
发布时间:2023-12-24 12:35:15
在Python的async/await语法中,CancelledError()异常是由取消一个协程任务而引发的异常。当一个协程任务被取消时,它会引发CancelledError()异常。这个异常可以被捕获并做进一步处理,以便在协程任务被取消时执行一些清理工作。
在async/await语法中,取消一个协程任务可以通过调用task.cancel()来实现。当一个任务被取消时,它会立即停止执行并引发CancelledError()异常。被取消的任务的所属的事件循环会在协程任务的当前await表达式上引发CancelledError()异常。
下面是一个使用async/await的例子,演示了如何识别和处理CancelledError()异常:
import asyncio
async def my_coroutine():
try:
while True:
await asyncio.sleep(1)
print("Coroutine is running")
except asyncio.CancelledError:
print("Coroutine was cancelled")
async def main():
# 创建一个协程任务
task = asyncio.create_task(my_coroutine())
# 等待一段时间后取消任务
await asyncio.sleep(5)
task.cancel()
# 等待任务完成
try:
await task
except asyncio.CancelledError:
print("CancelledError was caught")
asyncio.run(main())
在这个例子中,我们定义了一个名为my_coroutine()的协程函数。这个函数会不断地打印"Coroutine is running",直到它被取消为止。在main()函数中,我们创建了一个名为task的协程任务,然后等待5秒后取消这个任务。最后,我们使用try-except语句来捕获并处理CancelledError()异常。
运行这个例子后,我们会看到如下的输出:
Coroutine is running Coroutine is running Coroutine is running Coroutine is running Coroutine was cancelled CancelledError was caught
在输出中,我们可以看到协程任务在取消之前不断地运行。当任务被取消时,它会停止运行并引发CancelledError()异常。这个异常被捕获并继续执行,最终输出"CancelledError was caught"。
通过识别和处理CancelledError()异常,我们可以在协程任务被取消时执行一些清理工作,例如关闭文件、释放资源等。
