如何使用aiohttp

时间:2019-06-27 13:36:36

标签: signals python-3.7 aiohttp

我正在尝试对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)

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

1 个答案:

答案 0 :(得分:1)

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

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