[Python]SQLAlchemy多进程出现mysql has gone away的问题

RT 当时我没明白,但是当我翻到这篇文章的时候,就明白了:地址
要理解这个问题产生的原因,我们就需要理解mysql以及多进程的原理。

索性我们现在不需要理解这个原理,只需要知道,多进程中,mysql会被进程关闭,然后后来的进程就没法用了,就是酱紫。

那么我们该怎么解决呢?

很简单,sqlalchemy官网已经给出解决方案了。传送门

翻到这行里面,参照他下面的代码,在engine的下面复制黏贴,多进程的问题就迎刃而解。代码如下,一定要添加在创建了engine之后

from sqlalchemy import event
from sqlalchemy import exc
import os

engine = create_engine(".....") ## 这里新建engine只是伪代码,请使用正确的代码来创建engine

@event.listens_for(engine, "connect")
def connect(dbapi_connection, connection_record):
    connection_record.info['pid'] = os.getpid()

@event.listens_for(engine, "checkout")
def checkout(dbapi_connection, connection_record, connection_proxy):
    pid = os.getpid()
    if connection_record.info['pid'] != pid:
        connection_record.connection = connection_proxy.connection = None
        raise exc.DisconnectionError(
                "Connection record belongs to pid %s, "
                "attempting to check out in pid %s" %
                (connection_record.info['pid'], pid)
        )

未经允许不得转载:RffanLAB|Rffan实验室 » [Python]SQLAlchemy多进程出现mysql has gone away的问题

赞 (1)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址