我有一个使用Python3.7.10的API服务器。我使用的FastAPI框架有sqlalchemy,异步,内核2-二进制,异步the和postgresql。我使用aws弹力豆杆部署这个。应用程序似乎运行良好,但每次我的前端调用端点时,似乎连接都没有正确关闭。
误差
Jun 1 21:17:33 web: ERROR:sqlalchemy.pool.impl.AsyncAdaptedQueuePool:Exception closing connection <AdaptedConnection <asyncpg.connection.Connection object at 0x7fd8b005cb90>>
Jun 1 21:17:33 web: Traceback (most recent call last):
Jun 1 21:17:33 web: File "/var/app/venv/staging-LQM1lest/lib64/python3.7/site-packages/sqlalchemy/pool/base.py", line 247, in _close_connection
Jun 1 21:17:33 web: self._dialect.do_close(connection)
Jun 1 21:17:33 web: File "/var/app/venv/staging-LQM1lest/lib64/python3.7/site-packages/sqlalchemy/engine/default.py", line 688, in do_close
Jun 1 21:17:33 web: dbapi_connection.close()
Jun 1 21:17:33 web: File "/var/app/venv/staging-LQM1lest/lib64/python3.7/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 749, in close
Jun 1 21:17:33 web: self.await_(self._connection.close())
Jun 1 21:17:33 web: File "/var/app/venv/staging-LQM1lest/lib64/python3.7/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 68, in await_only
Jun 1 21:17:33 web: return current.driver.switch(awaitable)
Jun 1 21:17:33 web: File "/var/app/venv/staging-LQM1lest/lib64/python3.7/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 121, in greenlet_spawn
Jun 1 21:17:33 web: value = await result
Jun 1 21:17:33 web: File "/var/app/venv/staging-LQM1lest/lib64/python3.7/site-packages/asyncpg/connection.py", line 1334, in close
Jun 1 21:17:33 web: await self._protocol.close(timeout)
Jun 1 21:17:33 web: File "asyncpg/protocol/protocol.pyx", line 581, in close
Jun 1 21:17:33 web: concurrent.futures._base.CancelledError
下面是引擎和会话的设置:
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from app.model.base import CustomBase
from app.core.config import SQLALCHEMY_DATABASE_URI
engine = create_async_engine(SQLALCHEMY_DATABASE_URI)
SessionLocal = sessionmaker(
autocommit=False,
autoflush=False,
class_=AsyncSession,
bind=engine,
expire_on_commit=False,
)
我正在使用FastAPI的依赖项注入来获得以下会话:
async def get_db() -> AsyncSession:
async with SessionLocal() as session:
yield session
此错误只出现在我的部署中,而不是本地环境中,而且似乎只有在异步使用sqlalchemy时才会出现。谢谢你的帮助!
发布于 2022-11-11 23:44:00
我的问题是通过使用NullPool类解决的。
from sqlalchemy.pool import NullPool
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from app.model.base import CustomBase
from app.core.config import SQLALCHEMY_DATABASE_URI
engine = create_async_engine(
SQLALCHEMY_DATABASE_URI, pool_pre_ping=True, poolclass=NullPool
)
SessionLocal = sessionmaker(
autocommit=False,
autoflush=False,
class_=AsyncSession,
bind=engine,
expire_on_commit=False,
)
发布于 2022-10-19 09:32:59
通常,我在使用:
@app.middleware("http")
async def add_process_time_header(request: fastapi.Request, call_next):
禁用中间件起了作用。仍在努力弄清楚这一点:)
https://stackoverflow.com/questions/72468241
复制相似问题