Tornado + sqlalchemy在SAE上出现2006, 'MySQL server has gone away' 错误
设计了一个定时任务,执行时间大概在30秒,在邮件收取的环节耗时较长,从日志里看大概每半小时就会出现一次
MySQL server has gone away的报错。
已经按照谷歌到的建议,把sqlalchemy的pool_recycle参数重设了。
engine = create_engine(db_config, pool_recycle=5, pool_size=20)
附上我的代码:
class ApplyReplyHandler(BaseHandler):
def get(self):
try:
reply = self.session.query(func.max(Reply.mail_id).label('max_mail_id')).one()
offset = reply.max_mail_id if reply.max_mail_id else 0
for mail_id, mail_addr, mail_subject, mail_body in receive_mail(offset):
m = search(r'\[##(.+)##\]', mail_subject)
if not m:
continue
apply_secret = m.group(1)
related_apply = self.session.query(Apply).filter(Apply.secret_key == apply_secret).filter(
Apply.mail_addr == mail_addr).first()
if not related_apply:
continue
reply = Reply(apply_id=related_apply.id, mail_id=mail_id, mail_subject=mail_subject,
mail_body=mail_body)
self.session.add(reply)
related_apply.status = 4
self.session.commit()
self.write('success')
except Exception, e:
logging.exception(e)
self.write('failed')
BaseHandler是这样初始化和关闭MySQL连接的:
class BaseHandler(tornado.web.RequestHandler):
def initialize(self):
self.session = DB_Session()
def on_finish(self):
self.session.close()
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是两次访问mysql的间隔时间会比较长吗,如果是这样的话,我的建议是每次使用db连接时候先
session.close()
一下,这样连接总是重新建立的貌似
pool_recycle
设置也不起作用,楼主后来怎么解决的