您好,我目前正在使用 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分钟崩溃一次。我认为,我可以正确打开和关闭数据库连接,但是也许我错了。
在此先感谢您的帮助。