【发布时间】:2023-03-04 08:59:02
【问题描述】:
关于普通def 路径操作函数、依赖项和 SQLAlchemy 的菜鸟问题。在此处引用示例:https://fastapi.tiangolo.com/tutorial/sql-databases/#create-a-dependency,其中数据库会话在get_db()(同步)中创建并在create_user()(同步)中使用。根据https://fastapi.tiangolo.com/async/#very-technical-details,同步依赖和路径操作函数在线程池中执行,这是否意味着同一个数据库会话对象在两个不同的线程之间有效共享(假设它不是跨依赖重用的同一个线程和路径操作函数)?由于 SQLAlchemy 会话不是线程安全的,这可能有问题吗?
我可能完全误解了它是如何工作的,所以任何澄清都将不胜感激。
谢谢!
编辑:在考虑了更多之后,我认为这应该没问题,因为会话是按顺序(而不是同时)访问的,即使它可能由两个不同的线程访问。但我假设像下面这样使用session 会有问题?
async def func(s: Session):
loop = asyncio.get_running_loop()
await loop.run_in_executor(None, some_func, s)
await loop.run_in_executor(None, some_other_func, s)
...
【问题讨论】:
标签: multithreading sqlalchemy fastapi