避免SQLAlchemy中的套接字超时

6 投票
1 回答
2133 浏览
提问于 2025-04-16 02:59

我刚接触SQLAlchemy,想用它来为我的个人项目创建和填充一个数据库。我把pool_timeout设置成了43200(也就是12个小时),但我还是遇到了socket超时的问题。

engine = sqlalchemy.create_engine(
            'postgresql+pg8000://gdwatson:pass@localhost/dbname',
            pool_timeout=43200)
db.tables.meta.drop_all(bind=engine)
db.tables.meta.create_all(bind=engine)

conn = engine.connect()
dataset = build_dataset()
conn.execute(db.tables.mytable.insert(),
             dataset)
conn.close()

经过一段时间的处理后,我最终得到了socket.timeout: timed out的错误,处理时间大概在一个小时以内,肯定不会超过两个小时。这个问题其实有三层,处理超时异常的时候又发生了另一个异常,然后在处理那个异常时又出现了一个新的异常。(可能是这个库在重试?)这个异常发生在conn.execute,我不知道该怎么解决这个问题。

我搜索了一下,没有找到什么有用的信息。我使用的是Python 3.1和SQLAlchemy 0.6.1,供参考。

1 个回答

2

我不知道这是不是推荐的方法,但你可以定期发送一个 SELECT 1 的指令,这样可以确保连接不会闲置。
你也可以看看这个链接,里面有一些指导建议。

撰写回答