Как выполнить очистку после завершения работы сервера Flask? - PullRequest
0 голосов
/ 22 апреля 2019

Я написал 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...