Как реализовать обратные вызовы для сигналов SIGTERM и SIGINT с помощью aiohttp - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь осуществить корректное завершение работы моего веб-сервера, управляемого aiohttp. Мне нужно это, чтобы изящно закрыть и очистить подключения 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)

Есть идеи? спасибо за ваши ответы заранее

1 Ответ

1 голос
/ 27 июня 2019

Хорошо, решение объяснено в официальных документах, но его нелегко найти.Вы можете зарегистрировать обратные вызовы через свойство on_shutdown объекта веб-приложения.

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

...