异步任务取消。是同步的吗?

时间:2019-07-18 07:41:24

标签: python python-asyncio event-loop asyncio

我知道task.cancel()安排了一个异常,该异常将被抛出到task函数中。这是同步发生的吗? (因为我不等待task.cancel())。 task.cancel()行后面的代码是否可以假定该任务将不再运行?

一个简单的例子:

async def task1():
    await asyncio.sleep(3)
    print("after sleep")

async def task2():
    t = loop.create_task(task1())
    await asyncio.sleep(1)
    t.cancel()
    # can the following code lines assume that task1 is no longer running?

loop = asyncio.get_event_loop()
loop.run_forever()

1 个答案:

答案 0 :(得分:1)

  

可以在task.cancel()行之后的代码假定该任务将   不再运行?

不。 task.cancel()仅将任务标记为稍后被取消。您应该在任务之后显式等待任务并捕获CancelledError,以确保任务已取消。

请参见example here