如何在SQLAlchemy中将pool_timeout设置为infinity?

时间:2018-12-04 11:25:18

标签: python postgresql sqlalchemy connection-pooling

我正在为客户端构建一个API,该API可同时接收多个请求。每个请求都需要访问PostgreSQL数据库,因此我使用连接池来处理并发请求。

现在,发生这种情况的情况是有时客户端超过一周左右都没有发送请求。在这种情况下,我不希望由于超时(由于空闲连接)而关闭连接。

我正在使用SQLAlchemy API来处理数据库连接和池,并且在&name=sYmbol.Name(D:0x100) 方法中看到一个pool_timeout参数,该参数逐字引用,“之前等待的秒数放弃从池中获得连接。”

是否可以通过为此参数设置值(例如-1)来使超时超时(即禁用超时)?我在文档中找不到任何内容。

1 个答案:

答案 0 :(得分:0)

我今天仔细研究了一下,发现在后台,超时最终传递给了Queue对象(https://github.com/sqlalchemy/sqlalchemy/blob/master/lib/sqlalchemy/pool/impl.py#L97https://github.com/sqlalchemy/sqlalchemy/blob/master/lib/sqlalchemy/pool/impl.py#L117),如果将timeout设置为,它将永远阻塞无:

  

如果可选参数block为True且timeout为None(           默认值),如有必要,请阻止直到有可用的商品为止。如果           timeout是一个正数,最多可阻止timeout           秒,如果没有项目则引发Empty异常           在该时间内可用。否则(block为假),           如果有货马上退货,否则提高           Empty例外(在这种情况下,timeout被忽略)。

(来自https://github.com/sqlalchemy/sqlalchemy/blob/c785a528ea200a8905d1b5d7ab4088d501606d2b/lib/sqlalchemy/util/queue.py#L135