SQLAlchemy MySQL 连接挂起

时间:2021-06-15 14:45:15

标签: python mysql sqlalchemy

我在使用 MySQL 数据库的 Python sqlalchemy 库中遇到了一个问题。有很多连接由于某种原因没有被正确处理。我有一个在 Linux docker 容器上作为守护进程运行的服务。我在服务中只有一个调用数据库的函数,所以我确切地知道问题发生在哪里。根据我能找到的所有文档,我不知道为什么会发生这种情况。我的代码的简化版本结构如下:

import sqlalchemy as db
from myapp import config

def run():
    engine = db.create_engine(config.CON_STR)
    Session = db.orm.sessionmaker(bind=engine)

    with engine.connect() as con:
        ses = Session(bind=con)
        # do work
        ses.commit()
    
    return 0

如您所见,引擎和会话在此函数中是隔离的,该函数被调用并很快退出。我可以在我的日志中看到该函数的行为符合预期(意味着它正确进入和退出)。但出于某种原因,有很多挂起的连接(见下文)。

Here is the output of connections to MySQL from lsof -i -P -n

Here is the MySQL show processes output

如您所见,这些连接已经挂了很长时间了。

据我所知,引擎和会话变量应该在函数返回时关闭。我一生都无法弄清楚在此函数返回后会发生什么导致连接无法关闭。什么可能导致这个问题?我可以添加一些东西来确保连接正确关闭吗?

0 个答案:

没有答案