【发布时间】:2019-07-27 17:08:16
【问题描述】:
据我所知,当我调用 create_task() 时,它会放在事件循环队列的末尾。
我的用例如下,我有一些由同一个协程组成的任务。我想在某些失败的情况下取消所有任务。这是模式:
async def coro(params):
# long running task...
if failed_condition:
await cancel_all() # should cancel all tasks made of coro
async def cancel_all():
for task in tasks:
task.cancel()
await asyncio.gather(*tasks) # wait for cancel completion
print("All tasks cancelled")
tasks = []
async def main():
tasks = [loop.create_task(coro(params)) for x in range(5)]
asyncio.gather(*tasks)
问题在于,由于cancel_all()本身正在等待一个任务,所以它会被自己取消。
我该如何解决这个问题?
我可以改用 loop.create_task(cancel_all()),但我希望 cancel_all() 尽快运行。
【问题讨论】:
标签: python python-asyncio