如何使用 aiohttp 实现 SIGTERM 和 SIGINT 信号的回调

How to implement callbacks for SIGTERM and SIGINT signals with aiohttp

我正在尝试通过 aiohttp 正常关闭我的网络服务器 运行。我需要它来优雅地关闭和清理 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)

你有什么想法吗?提前感谢您的回答

好的,解决方案在官方文档中有说明,但不容易找到。您可以通过 Web 应用程序对象的 属性 on_shutdown 注册回调。

https://docs.aiohttp.org/en/stable/web_advanced.html#aiohttp-web-graceful-shutdown