我正在尝试对aiohttp运行的Web服务器实施正常关机。我需要它来优雅地关闭和清理Redis和数据库连接。
对于我在讨论此问题的不同文档中所看到的内容,我已经在主循环的add_signal_handler中注册了一个回调,但是当我的服务器关闭时,回调仍然没有触发。
这就是我得到的:
def gracefull_shutdown(signame, loop):
logging.debug('graceful shutdown callback')
app = web.Application()
if __name__ == '__main__':
asyncioLoop = asyncio.get_event_loop()
for signame in {'SIGINT', 'SIGTERM'}:
asyncioLoop.add_signal_handler(
getattr(signal, signame),
functools.partial(gracefull_shutdown, signame, asyncioLoop)
)
web.run_app(app, handle_signals=True)
你有什么主意吗?感谢您的提前答复
答案 0 :(得分:1)
好的,解决方案在官方文档中有解释,但不容易找到。您可以通过Web应用程序对象的on_shutdown属性注册回调。
https://docs.aiohttp.org/en/stable/web_advanced.html#aiohttp-web-graceful-shutdown