【问题标题】:How do I set pool_timeout to infinity in SQLAlchemy?如何在 SQLAlchemy 中将 pool_timeout 设置为无穷大?
【发布时间】:2019-05-21 03:40:57
【问题描述】:

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

现在,有时客户会在一周左右的时间内没有发送任何请求。如果发生此类事件,我不希望连接因为超时(由于空闲连接)而关闭。

我正在使用 SQLAlchemy API 来处理数据库连接和池,我在 sqlalchemy.create_engine 方法中看到了一个 pool_timeout 参数,它被逐字引用,“在放弃获取之前等待的秒数来自池的连接。”

有没有办法通过为这个参数设置一个值(如-1)来实现无限超时(即禁用超时)?我在文档中找不到任何关于此的内容。

【问题讨论】:

  • 亲爱的@Train Heartnet,您能否提供一些可重现的代码?真诚的,

标签: python postgresql sqlalchemy connection-pooling


【解决方案1】:

我今天稍微研究了一下,发现在后台,超时最终会传递给队列对象(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),如果超时设置为无,它将永远阻塞:

如果可选参数 block 为 True 且 timeout 为 None( 默认),必要时阻止,直到项目可用。如果 timeout 为正数,最多阻塞timeout 秒并引发 Empty 异常,如果没有项目 在那段时间内可用。否则(block 为假), 如果一个项目立即可用,则返回一个项目,否则提高 Empty 异常(timeout 在这种情况下被忽略)。

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

【讨论】:

    猜你喜欢
    • 2018-10-13
    • 2021-02-09
    • 2021-02-10
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 2011-09-04
    • 1970-01-01
    相关资源
    最近更新 更多