gpt4 book ai didi

sqlalchemy - Flask-SQLAlchemy 和 Gevent 没有关闭 mysql 连接

转载 作者:行者123 更新时间:2023-12-04 12:57:56 25 4
gpt4 key购买 nike

我目前正在使用 Flask-uWSGI-Websockets为我的应用程序提供 websocket 功能。我使用 Flask-SQLAlchemy 连接到我的 MySQL 数据库。

Flask-uWSGI-Websockets 使用 gevent 来管理 websocket 连接。

我目前遇到的问题是,当 websocket 连接结束时,Flask-SQLAlchemy 设置的数据库连接将继续存在。

我试过调用db.session.close()db.engine.dispose()在每个 websocket 连接之后,但这没有效果。

调用gevent.monkey.patch_all()在我的应用程序开始时并没有什么不同。

我正在做的一个简单的表示是这样的:

from gevent.monkey import patch_all
patch_all()

from flask import Flask
from flask_uwsgi_websocket import GeventWebSocket
from flask_sqlalchemy import SQLAlchemy

app = Flask()
ws = GeventWebSocket()
db = SQLAlchemy()

db.init_app(app)
ws.init_app(app)


@ws.route('/ws')
def websocket(client):
""" handle messages """
while client.connected is True:
msg = client.recv()
# do some db stuff with the message

# The following part is executed when the connection is broken,
# i tried this for removing the connection, but the actual
# connection will stay open (i can see this on the mysql server).
db.session.close()
db.engine.dispose()

最佳答案

我也有同样的情况。和我的解决方案位于 mysql 配置文件 my.cnf :

[mysqld]
interactive_timeout=180
wait_timeout=180

保存 my.cnf 后必须重启 mysql 服务。

如果您不想重新启动 mysql 服务,您可以使用 sql 查询:
SET GLOBAL interactive_timeout = 180;
SET GLOBAL wait_timeout = 180;

另见 wait_timeoutinteractive_timeout在 mysql.com 上

关于sqlalchemy - Flask-SQLAlchemy 和 Gevent 没有关闭 mysql 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31047108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com