Python 异步IO任务取消。是同步的吗?
我知道Python 异步IO任务取消。是同步的吗?,python,event-loop,python-asyncio,Python,Event Loop,Python Asyncio,我知道task.cancel()安排在任务函数中抛出异常。这是以同步方式发生的吗?(因为我不等待task.cancel())。task.cancel()行后面的代码是否可以假定任务将不再运行 一个简单的例子: async def task1(): await asyncio.sleep(3) print("after sleep") async def task2(): t = loop.create_task(task1()) await asyncio.sl
task.cancel()
安排在任务函数中抛出异常。这是以同步方式发生的吗?(因为我不等待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()
可以在task.cancel()行之后编写代码,假定任务将
不再跑了
否。task.cancel()
仅标记以后要取消的任务。您应该在任务完成后显式地等待它,并捕获cancelederror
,以确保任务已取消
参见。通过阅读文档,我会说“不”,它说“这安排在事件循环的下一个周期将CanceledError异常抛出到包装的协同程序中。”