报错信息
sqlalchemy.exc.TimeoutError: QueuePool limit of size 5 overflow 10 reached, connection timed out, timeout 30 (Background on this error at: http://sqlalche.me/e/3o7r)
解决办法
参考 :https://docs.sqlalchemy.org/en/20/core/pooling.html
在创建数据库engine
时指定连接池pool_size
及可接受的溢出max_overflow
大小
python
engine = create_engine(
"postgresql+psycopg2://me@localhost/mydb", pool_size=20, max_overflow=0
)
pool_size
:要维护的池的大小,默认为5
。这是池中持久保留的最大连接数。请注意,池开始时没有连接;一旦请求了此数量的连接,该数量的连接将保持不变。pool_size
可以设置为0
以指示没有大小限制;若要禁用池,请改用NullPool
。max_overflow
:池的最大溢出大小。当连接数达到pool_size
中设置的大小时,将返回不超过此限制的其他连接。当这些附加连接返回到池时,它们将断开连接并被丢弃。因此,池将允许的同时连接的总数是pool_size+max_overflow
,并且池将允许"睡眠"连接的总数为pool_size
。max_overflow
可以设置为-1
表示没有溢出限制;对并发连接的总数没有限制。默认值为10
。- 其他参数
timeout
:连接等待超时时间 - 其他参数
use_lifo
:检索连接时使用后进先出(LIFO
),而不是FIFO
(先进先出)。使用LIFO
,服务器端超时方案可以减少非高峰使用期间使用的连接数量。在计划服务器端超时时,请确保使用回收或预ping
策略来优雅地处理过时的连接。
注意事项
The QueuePool class is not compatible with asyncio. When using create_async_engine to create an instance of AsyncEngine, the AsyncAdaptedQueuePool class, which makes use of an asyncio-compatible queue implementation, is used instead.
翻译
sqlalchemy的连接池队列
sqlalchemy.pool.QueuePool
不兼容asyncio