Протокол продолжительности жизни¶
Версия: 2.0 (2019-03-20)
Спецификация Lifespan ASGI описывает, как передавать в ASGI события, связанные с продолжительностью жизни, такие как запуск и выключение. Это относится к продолжительности жизни основного цикла событий. В многопроцессной среде в каждом процессе будут происходить события времени жизни.
Сообщения о времени жизни позволяют приложению инициализировать и завершать работу в контексте запущенного цикла событий. Примером может служить создание пула соединений и последующее закрытие пула соединений для освобождения соединений.
Возможная реализация этого протокола приведена ниже:
async def app(scope, receive, send):
if scope['type'] == 'lifespan':
while True:
message = await receive()
if message['type'] == 'lifespan.startup':
... # Do some startup here!
await send({'type': 'lifespan.startup.complete'})
elif message['type'] == 'lifespan.shutdown':
... # Do some shutdown here!
await send({'type': 'lifespan.shutdown.complete'})
return
else:
pass # Handle other types
Область применения¶
Область действия существует в течение всего цикла событий. Сама область содержит основные метаданные:
type
(Unicode string) –"lifespan"
.asgi["version"]
(Unicode string) – Версия спецификации ASGI.asgi["spec_version"]
(Unicode string) – Используемая версия данной спецификации. Необязательно; по умолчанию"1.0"
.
Если при вызове вызываемой прикладной программы с сообщением lifespan.startup
или областью видимости с типом lifespan
возникает исключение, сервер должен продолжить работу, но не посылать никаких событий lifespan.
Это позволяет обеспечить совместимость с приложениями, которые не поддерживают протокол lifespan. Если вы хотите зарегистрировать ошибку, возникающую во время запуска lifespan и не позволяющую серверу запуститься, то вместо этого отправьте обратно lifespan.startup.failed
.
Стартап¶
Отправляется, когда сервер готов к запуску и приему соединений, но еще до того, как он начал это делать.
Ключи:
type
(Unicode string) –"lifespan.startup"
.
Ввод в эксплуатацию завершен¶
Отправляется приложением, когда оно завершило запуск. Сервер должен дождаться этого сообщения, прежде чем начать обработку соединений.
Ключи:
type
(Unicode string) –"lifespan.startup.complete"
.
Запуск не удался¶
Отправляется приложением, когда ему не удалось завершить запуск. Если сервер видит это, он должен записать в журнал/напечатать сообщение, а затем выйти.
Ключи:
type
(Unicode string) –"lifespan.startup.failed"
.message
(строка Unicode) – Необязательно; по умолчанию""
.
Выключение¶
Отправляется, когда сервер прекратил принимать соединения и закрыл все активные соединения.
Ключи:
type
(Unicode string) –"lifespan.shutdown"
.
Выключение завершено¶
Отправляется приложением, когда оно завершило свою очистку. Сервер должен дождаться этого сообщения перед завершением работы.
Ключи:
type
(Unicode string) –"lifespan.shutdown.complete"
.
Выключение не произошло¶
Отправляется приложением, когда ему не удалось завершить очистку. Если сервер видит это, он должен записать в журнал/напечатать сообщение, а затем завершить работу.
Ключи:
type
(Unicode string) –"lifespan.shutdown.failed"
.message
(строка Unicode) – Необязательно; по умолчанию""
.
История версий¶
2.0 (2019-03-04): Добавлены startup.failed и shutdown.failed, уточнена обработка исключений на этапе запуска.
1.0 (2018-09-06): Обновлена спецификация ASGI с протоколом жизни.
Авторское право¶
Этот документ стал общественным достоянием.