如何使用 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
我正在尝试通过 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