为了账号安全,请及时绑定邮箱和手机立即绑定

Tornado + sqlalchemy在SAE上出现2006, 'MySQL server has gone away' 错误

Tornado + sqlalchemy在SAE上出现2006, 'MySQL server has gone away' 错误

交互式爱情 2019-02-26 08:53:33
设计了一个定时任务,执行时间大概在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()
查看完整描述

2 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

是两次访问mysql的间隔时间会比较长吗,如果是这样的话,我的建议是每次使用db连接时候先session.close()一下,这样连接总是重新建立的

查看完整回答
反对 回复 2019-03-01
?
慕神8447489

TA贡献1780条经验 获得超1个赞

貌似pool_recycle设置也不起作用,楼主后来怎么解决的

查看完整回答
反对 回复 2019-03-01
  • 2 回答
  • 0 关注
  • 613 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信