【发布时间】:2018-11-16 13:41:06
【问题描述】:
我试图了解 Future.cancel() 与 asyncio 的用法。 Python 文档对此非常了解。我在这里或搜索引擎上的现有问题没有成功。我只是想了解当一个任务正在等待一个被取消的未来时会发生什么。
这是我的代码:
import asyncio
async def foo(future):
await asyncio.sleep(3)
future.cancel()
async def bar(future):
await future
print("hi")
async def baz(future):
await bar(future)
print("ho")
loop = asyncio.get_event_loop()
future = loop.create_future()
loop.create_task(baz(future))
loop.create_task(foo(future))
loop.run_forever()
"hi" 未打印。所以我最初猜测bar 在取消的情况下会返回await future 行。
但是,"ho" 也不会打印。因此,取消未来永远不会退回到等待它的任务似乎是合乎逻辑的?但是这些任务会永远处于事件循环中吗?这似乎不可取,我在哪里误解了?
【问题讨论】:
-
await future语句引发asyncio.CancelledError 异常。如果您想忽略取消,请使用try/except语句。
标签: future python-asyncio