tri*_*nth 16 python mysql sqlalchemy flask
我有一个使用SQLAlchemy和MySQL的Flask Web应用程序,我已经设置了一个scopedsession().我还有一个teardown_request处理程序,在每个请求完成后调用session.remove().出于某些奇怪的原因,如果一天或更长时间没有在Web应用程序上发出请求,应用程序将获得"Operationalerror:MySQL Server已经消失".
在我的调试任务中,我查看了SHOW PROCESSLIST并看到了以下内容:
39817253 | sqladmin | my_host | kb_dev | Sleep | 174 |
Run Code Online (Sandbox Code Playgroud)
174是我的应用程序连接"休眠"的秒数.如果应用程序没有提出其他请求,它会继续计数.
即使我的请求完成后,似乎我的应用程序仍然保持与MySQL的连接!并且通常只有一个进程,无论我对我的应用程序发出多少请求,无论是否同时进行.
我的问题是连接是否正常"睡眠"这么长时间?我很确定延长睡眠会导致MySQL在某个超时后切断连接,这反过来导致"OperationalError:Mysql已经消失"错误.
zzz*_*eek 24
SQLAlchemy的默认行为是在引擎内池连接:
http://www.sqlalchemy.org/docs/core/engines.html
http://www.sqlalchemy.org/docs/core/pooling.html
至于隔夜的断开事件,这是一个已知的MySQL行为,SQLAlchemy提供了pool_recycle标志来解决它.以下是许多描述它的链接:
http://www.sqlalchemy.org/docs/dialects/mysql.html#connection-timeouts
http://www.sqlalchemy.org/docs/core/pooling.html#setting-pool-recycle
http://www.sqlalchemy.org/docs/core/engines.html#sqlalchemy.create_engine(pool_recycle)
http://www.sqlalchemy.org/trac/wiki/FAQ#MySQLserverhasgoneaway
几天前的博文:
http://douglatornell.ca/blog/2012/01/08/staying-alive/
归档时间: |
|
查看次数: |
11838 次 |
最近记录: |