如果我asyncio在顶级类中创建一系列任务,所有这些任务本质上都应该永远运行,如下所示:
self.event_loop.create_task(...)
self.event_loop.create_task(...)
self.event_loop.create_task(...)
...
self.event_loop.run_forever()
# Once we fall out of the event loop, collect all remaining tasks,
# cancel them, and terminate the asyncio event loop
tasks = asyncio.Task.all_tasks()
group = asyncio.gather(*tasks, return_exceptions=True)
group.cancel()
self.event_loop.run_until_complete(group)
self.event_loop.close()
Run Code Online (Sandbox Code Playgroud)
上面的代码没有处理以下情况,我发现我越来越需要这种情况,而且我还没有在谷歌搜索或asyncio文档中看到一个例子:
如果其中一项任务因异常而失败,则不会处理该异常 - 所有其他任务都会继续进行,但该任务只是静默停止(异常输出除外)。
那么,我该如何:
self.event_loop.create_task(...)再次运行,只是为了那个任务?这似乎需要找到在事件循环中收到异常的任务,将其删除,然后添加一个新任务 - 我不清楚如何做到这一点。