2017-10-12 68 views
0

我对mysql和sqlalchemy有一个奇怪的问题。 一切工作的时间细99%,但过一段时间我的代码需要17分钟来执行,并抛出这个异常:17分钟后出现SQLAlchemy提交错误

异常的“承诺”提出:(_mysql_exceptions.OperationalError)(2013年,“迷失连接到MySQL查询“)

这里时 服务器代码:

self.engine = create_engine(uri, echo=False, poolclass=NullPool) 
session_maker = orm.sessionmaker(
    bind=self.engine, 
    expire_on_commit=False, 
    autoflush=False, 
    extension=None 
) 
self.session = self.orm.scoping.scoped_session(session_maker) 
self.session.add(entity) # it's a simple object I want to insert 
self.session.commit() 

我启动mysql中:

  • 慢查询日志中的InnoDB

这些日志我的错误没有

  • 打印僵局。 mysql中的空闲连接是30分钟 mysql前端负载均衡器中的空闲连接是4分钟

    所以我没有更多的想法,我的错误。

    你有什么新想法吗?与connect_args

    self.engine = create_engine(uri, echo=False, poolclass=NullPool ,connect_args={'connect_timeout': 10}) 
    

    Check here for more info

  • +0

    由于您使用的是NullPool,它似乎不像MySQL连接消失的问题。你介意与我们分享异常堆栈吗? – herokingsley

    回答

    0

    使用超时!

    +0

    我确实看到了这一点,但我没有看到与mysql丢失连接的链接。你能解释我吗? – Kiva

    +0

    我认为这可能是超时问题,因为目前没有其他明显的原因。你可以配置connect_timeout超过20分钟,并测试它 –

    +0

    默认connect_timeout似乎是10秒https://github.com/PyMySQL/PyMySQL/blob/dc01c6e7cd06cf523d67140b26afea365c130192/pymysql/connections.py#L584所以我不认为这是一条好路径。 – Kiva