В aiohttp или httpx мне нужно закрывать сеанс / клиент при завершении работы приложения

Я использую библиотеку httpx, но думаю, что принцип для aiohttp такой же. Если я создаю и повторно использую AsyncClient для нескольких запросов на протяжении всего времени существования приложения, мне нужно вызывать aclose() (или же closeесли используется клиент) при завершении работы приложения? Или эти связи умрут сами.

Что, если я запустил приложение в контейнере Docker? Это тоже будет фактором?

Я не понимаю, что происходит под объектами AsyncClient или Client (или ClientSession в aoihttp).

Спасибо за помощь.

1 ответ

Предлагаю вам использовать триггеры на startup и shutdown. Они описаны в документации https://fastapi.tiangolo.com/advanced/events/#events-startup-shutdown.

Ниже адаптация примера, взятого из документации:

from fastapi import FastAPI
import httpx

app = FastAPI()

items = {}
client = None


@app.on_event("startup")
async def startup_event():
    items["foo"] = {"name": "Fighters"}
    items["bar"] = {"name": "Tenders"}
    client = httpx.AsyncClient()

@app.on_event("shutdown")
async def shutdown_event():
    items["foo"] = {"name": "Fighters"}
    items["bar"] = {"name": "Tenders"}
    await client.aclose()

РЕДАКТИРОВАТЬ

Извините, неправильно понял вопрос.

В любом случае, как прокомментировал @Klaus D, система должна убить дочерний процесс (например, если их много), которые сохраняют открытые порты.

По моему опыту, это может быть не всегда так, поскольку я помню, что при программировании с помощью php мне приходилось вручную отключать все соединения с базой данных, иначе при перезапуске приложения я получил сообщение "Процесс уже использует этот порт".

Хотя это был случай соединения с базой данных, а не соединения HTTP, всегда рекомендуется закрывать все неиспользуемые соединения, поскольку ОС может задерживать обнаружение запущенного процесса с открытым портом и его завершение. Таким образом, ваше приложение (или что-то еще) будет остановлено, но через некоторое время процесс все еще будет выполняться.

Обновления ОС могут изменить поведение наблюдателя за процессами и зависят от самой ОС. Так что отнеситесь к тому, что я говорю, с недоверием.

Другие вопросы по тегам