Правильный способ создания и повторного подключения внешних объектов подключения в Flask за Gunicorn - PullRequest
0 голосов
/ 20 марта 2020

В настоящее время у меня есть приложение Flask за сервером Gunicorn, для одной основной конечной точки объект подключения извлекает данные из сторонней службы и создается во время запуска приложения. Если я правильно понимаю Gunicorn, то этот объект будет запущен только один раз при запуске, а затем тот же самый форк будет использовать тот же объект для последующих запросов. Если я перезагружаю приложение, оно работает нормально, поэтому я сузил его до объекта подключения, который не восстанавливает соединение сам по себе при каждом запросе.

Я попытался просто повторно создать экземпляр объекта по неудавшемуся запросу, надеясь, что он будет исправить объект для последующих запросов, но теперь я понимаю, что в предварительной форковской модели Gunicorn это не сработает. Есть ли какой-нибудь способ, которым я могу выполнить или изменить хук в исходном процессе, который разветвляется каждый раз, когда требуется создать работника?

init .py

app = Flask(__name__)
connection = Connect(service)

файл конечной точки

import app, connection

## In the endpoint logic

try:
  # Try to make external request

except ConnectionError as e:
  # Hope to somehow re-instantiate that object for future requests
  connection = Connect(service)
...