jaa*_*apz 7 sqlalchemy gevent uwsgi flask-sqlalchemy
我目前正在使用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()
Run Code Online (Sandbox Code Playgroud)
我有同样的情况。我的解决方案位于 mysql 配置文件中my.cnf:
[mysqld]
interactive_timeout=180
wait_timeout=180
Run Code Online (Sandbox Code Playgroud)
保存my.cnf后必须重新启动mysql服务。
如果你不想重启mysql服务,你可以使用sql查询:
SET GLOBAL interactive_timeout = 180;
SET GLOBAL wait_timeout = 180;
Run Code Online (Sandbox Code Playgroud)
另请参阅mysql.com 上的wait_timeout和Interactive_timeout
| 归档时间: |
|
| 查看次数: |
882 次 |
| 最近记录: |