当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python asyncio.Task.cancel用法及代码示例


用法:

cancel(msg=None)

请求取消任务。

这会安排在事件循环的下一个周期将 CancelledError 异常抛出到包装的协程中。

然后协程有机会通过使用try … … except CancelledErrorfinally 块抑制异常来清理甚至拒绝请求。因此,与 Future.cancel() 不同,Task.cancel() 不保证任务将被取消,尽管完全抑制取消并不常见,并且积极劝阻。

在 3.9 版中更改:添加了msg范围。

以下示例说明协程如何拦截取消请求:

async def cancel_me():
    print('cancel_me(): before sleep')

    try:
        # Wait for 1 hour
        await asyncio.sleep(3600)
    except asyncio.CancelledError:
        print('cancel_me(): cancel sleep')
        raise
    finally:
        print('cancel_me(): after sleep')

async def main():
    # Create a "cancel_me" Task
    task = asyncio.create_task(cancel_me())

    # Wait for 1 second
    await asyncio.sleep(1)

    task.cancel()
    try:
        await task
    except asyncio.CancelledError:
        print("main(): cancel_me is cancelled now")

asyncio.run(main())

# Expected output:
#
#     cancel_me(): before sleep
#     cancel_me(): cancel sleep
#     cancel_me(): after sleep
#     main(): cancel_me is cancelled now

相关用法


注:本文由纯净天空筛选整理自python.org大神的英文原创作品 asyncio.Task.cancel。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。