【发布时间】:2019-07-31 22:19:28
【问题描述】:
我正在尝试编写一个asyncio 脚本,该脚本可以通过发送 SIGHUP 信号正常关闭。
import asyncio
from signal import SIGHUP
def handle_sighup():
print("sighup received")
raise Exception()
async def main():
asyncio.get_running_loop().add_signal_handler(SIGHUP, handle_sighup)
while True:
print("running")
await asyncio.sleep(1)
try:
asyncio.run(main())
finally:
asyncio.run(graceful_shutdown())
我天真地假设在处理程序中引发未处理的异常会传播到主协程并导致 finally 块执行。然而,在打印“sighup received”后,主协程继续运行。
我猜回调正在执行器中运行?
如何重构此代码,以便处理信号以导致主协程停止并执行下降到finally 块?
有更好的方法吗?
【问题讨论】:
-
一定要使用 asyncio 吗?
trio处理您所期望的异常。
标签: python python-3.x python-asyncio