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

发布于 2022-08-31 09:17:36 字数 1650 浏览 8 评论 0

设计了一个定时任务,执行时间大概在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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

献世佛 2022-09-07 09:17:36

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

孤檠 2022-09-07 09:17:36

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文