Я построил лямбда-функцию для AWS в Python, которая использует aiohttp
для выполнения некоторых запросов.
Как указано в документации AWS ,
Любые объявления в вашем коде функции Lambda (вне кода обработчика, см. Модель программирования) остаются инициализированными, обеспечивая дополнительную оптимизацию при повторном вызове функции. Например, если ваша функция Lambda устанавливает соединение с базой данных, а не восстанавливает соединение, исходное соединение используется в последующих вызовах.
поэтому я поместил aiohttp.ClientSession()
вне функции дескриптора, так что она может быть повторно использована будущими лямбда-функциями:
http_session = None
def handle(event, context):
global http_session
# http_session will be not None if context is reused
if http_session is None:
http_session = aiohttp.ClientSession()
# [...] Use http_session here
Однако я должен закрыть соединение с await session.close()
после того, как оно больше не используется, то есть когда контекст отбрасывается. Я не могу закрыть http_session
в пределах handle
, потому что это полностью аннулирует возможность повторного использования соединения.
Учитывая это, какие варианты у меня есть?
- Просто позвольте соединению открыться, и в какой-то момент оно закроется само.
- Существует способ выполнения определенного кода при удалении контекста.
- Нет способа делать то, что я хочу.
Спасибо, заранее.