當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。