20/30分钟后psycopg2.OperationalError

时间:2019-06-12 08:09:14

标签: python python-3.x postgresql flask psycopg2

说明

您好,我目前正在使用 Python / Flask 做一个Web应用程序。该应用程序将在路由器/交换机上进行一些测试,并将结果存储在 postgreSQL 数据库中。我正在使用 psycopg2 连接到数据库并提取这些数据的表中显示此结果。

此应用旨在每天24小时运行。但是问题是,在加载应用程序网页时,在20/30分钟后,我出现500内部服务器错误。当我查看日志时,这里是错误: Exception

如果我第二次刷新,则会收到另一条错误消息: psycopg2.OperationalError: server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request.

如果我第三次刷新,它将再次正常工作,但是如果每20/30分钟崩溃一次,则无法在生产环境中运行此应用。

我不明白为什么会出现此错误以及如何解决。这是一些代码:

某些代码

main.py

psycopg2.InterfaceError: connection already closed

check.py

app = Flask(__name__)
app.config['SECRET_KEY'] = "mysecretkey"
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(minutes=30)
app.config['postgreSQL_pool'] = psycopg2.pool.SimpleConnectionPool(1, 20,
    user = "username",
    password = "password",
    host = "myserver",
    port = "5432",
    database = "stackoverflow")

def get_db():
    if 'db' not in g:
        g.db = app.config['postgreSQL_pool'].getconn()
    return g.db

@app.teardown_appcontext
def close_conn(e):
    db = g.pop('db', None)
    if db is not None:
        app.config['postgreSQL_pool'].putconn(db)


@app.route('/', methods=['GET', 'POST'])
@login_required
def home():
    """
    Retourne la page principale avec la liste des équipements + export CSV possible
    """
    db = get_db()
    cursor = db.cursor()

    mois_lot = "Juin"
    cursor.execute("""SELECT *
                  FROM stackoverflow WHERE lot='%s'""" % (mois_lot))
    liste_lot = cursor.fetchall()


    count = Check.count(mois_lot, cursor)
    count_ok = Check.count_ok(mois_lot, cursor)
    count_ko = Check.count_ko(mois_lot, cursor)

    if request.method == 'POST':
        liste_lot.insert(0, ('IP Admin',
                             'Resultat',
                             'Equipement',
                             'Date derniere verification'))
        cursor.close()
        return excel.make_response_from_array(liste_lot, "csv", file_name="export_lot")
    else:
        cursor.close()
        return render_template('index.html',
                               value=liste_lot,
                               value2=count,
                               value3=count_ok,
                               value4=count_ko)

预期

我希望该应用程序不会每20/30分钟崩溃一次。我认为,我可以正确打开和关闭数据库连接,但是也许我错了。

在此先感谢您的帮助。

0 个答案:

没有答案