如果任何任务在任何地方引发了未处理的异常,我想停止程序,即事件循环。正常的行为是,您收到一条Task exception was never retrieved
错误消息,并且单个任务停止,但是循环继续运行所有其他任务。
例如:
import asyncio
async def foo():
while True:
await asyncio.sleep(1)
print("hi")
async def bug():
await asyncio.sleep(2)
raise TypeError
loop = asyncio.get_event_loop()
loop.create_task(foo())
loop.create_task(bug())
loop.run_forever()
输出:
"hi"
"hi"
Task exception was never retrieved
future: <Task finished coro=<bug() done, defined at <...>:9> exception=TypeError()>
Traceback (most recent call last):
File "<ipython-input-4-bd8651340a75>", line 11, in bug
raise TypeError
TypeError
"hi"
"hi"
"hi"
...
我的项目包含许多分布在许多文件中的协程,这些协程通过loop.create_task(foo())
相互添加到循环中,因此,由于它们彼此之间不是await
,因此您不能简单地处理一个或两个入口点协程在主文件中,并冒出错误。
答案 0 :(得分:0)
我想我已经用loop.set_exception_handler(handler)
找到了我想要的东西