首页 > 解决方案 > 如何使用 aiohttp 实现 SIGTERM 和 SIGINT 信号的回调

问题描述

我正在尝试对由 aiohttp 运行的 Web 服务器实现正常关闭。我需要它优雅地关闭和清理 redis 和 DB 连接。

对于我在不同的文档中看到的关于这个的内容,我已经使用主循环的 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)

你有什么主意吗 ?提前感谢您的回答

标签: signalspython-3.7aiohttp

解决方案


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

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


推荐阅读