Я написал Flask-сервер (который используется внутренней службой для выполнения вызовов REST), в моей настройке нет apache / nginx / django
Этот флеш-сервер работает в док-контейнере, и у меня естьКонечная точка / healthcheck, которая получает некоторую информацию из базы данных и возвращает 200 или код ошибки на ее основе.
Первоначально я подключался к базе данных Postgres с помощью psycopg2 и отключался в конце этого вызова
@app.route("/healthcheck", methods=['POST', 'GET'])
def healthcheck():
...
try:
postgres_conn = psycopg2.connect(host=name, database=db,
user=user, password=pass)
cur = postgres_conn.cursor()
cur.execute(
"SELECT \"Value\" FROM mytable WHERE (\"Key\" = 'PARAMETERS')")
...
except (Exception, psycopg2.DatabaseError) as error:
app.logger.info('Error connecting to Postgres database', error)
raise abort(500)
finally:
if postgres_conn:
if cur:
cur.close()
postgres_conn.close()
Теперь я пытаюсь сделать соединение с базой данных постоянным при нескольких вызовах REST
app = Flask(__name__)
postgres_conn = None
@app.route("/healthcheck", methods=['POST', 'GET'])
def healthcheck():
...
global postgres_conn
try:
if postgres_conn is None:
postgres_conn = psycopg2.connect(host=name, database=db,
user=user, password=pass)
cur = postgres_conn.cursor()
cur.execute(
"SELECT \"Value\" FROM mytable WHERE (\"Key\" = 'PARAMETERS')")
...
except (Exception, psycopg2.DatabaseError) as error:
app.logger.info('Error connecting to Postgres database', error)
raise abort(500)
Я не могу закрыть соединение (cur.close () и postgres_conn.close ()) в finallyзаблокировать сейчас.Я пытаюсь выяснить, как это сделать, прежде чем сервер Flask корректно завершит работу или перезапустится.Я обнаружил @ app.teardown_appcontext, но это происходит в конце запроса, а не в конце срока службы сервера Flask.