小编Gor*_*ler的帖子

捕获单个任务中的异常并重新启动它们

如果我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(...)再次运行,只是为了那个任务?这似乎需要找到在事件循环中收到异常的任务,将其删除,然后添加一个新任务 - 我不清楚如何做到这一点。
  • 允许没有问题的任务不间断地继续。希望避免处理收到异常的任务的任何副作用。

python python-3.x python-asyncio python-3.6

3
推荐指数
1
解决办法
1247
查看次数

标签 统计

python ×1

python-3.6 ×1

python-3.x ×1

python-asyncio ×1