sqlalchemy scoped_session 与 python asyncio 的正确用法
Correct usage of sqlalchemy scoped_session with python asyncio
我正在使用 asyncio 构建应用程序。我将使用 sqlalchemy 作为 orm。
据我了解 scoped_session 将会话与线程相关联,因此它们不会相互操作。
现在,由于 asyncio 在单个线程上工作,我相信 scoped_session 将无法正常工作,这会导致问题。
将 sqlalchemy 会话与 asyncio 结合使用的正确方法是什么?
答案取决于您的代码。
一般来说,您可以使用 sessionmaker 创建会话工厂并自行使用。
如果您的代码具有隐式上下文,您可以将 scoped_session
与自定义 scopefunc
结合使用,如 example.
中所示
隐式上下文可能会利用 asyncio.Task.current_task() 调用,但您还需要找到一种方法来销毁作用域会话。
我认为您不能将 sqlalchemy 与 asyncio 一起使用。 SQL Alchemy API 完全阻塞并且与 asyncio 不兼容。 http://techspot.zzzeek.org/2015/02/15/asynchronous-python-and-databases/
您 可以 使用 SQL Alchemy 与 gevent 异步使用,只要您能为您的数据库找到与 gevent 兼容的驱动程序。 gevent greenlents 很好地映射到 scoped_session
.
编辑:实际上,您 可以 将 SQL Alchemy 与 asyncio 结合使用,只要您能为您的数据库找到与 asyncio 兼容的驱动程序,例如https://github.com/aio-libs/aiopg。至于scoped_session
,使用current_task
,在你的web framework请求端销毁。
我正在使用 asyncio 构建应用程序。我将使用 sqlalchemy 作为 orm。 据我了解 scoped_session 将会话与线程相关联,因此它们不会相互操作。 现在,由于 asyncio 在单个线程上工作,我相信 scoped_session 将无法正常工作,这会导致问题。 将 sqlalchemy 会话与 asyncio 结合使用的正确方法是什么?
答案取决于您的代码。
一般来说,您可以使用 sessionmaker 创建会话工厂并自行使用。
如果您的代码具有隐式上下文,您可以将 scoped_session
与自定义 scopefunc
结合使用,如 example.
隐式上下文可能会利用 asyncio.Task.current_task() 调用,但您还需要找到一种方法来销毁作用域会话。
我认为您不能将 sqlalchemy 与 asyncio 一起使用。 SQL Alchemy API 完全阻塞并且与 asyncio 不兼容。 http://techspot.zzzeek.org/2015/02/15/asynchronous-python-and-databases/
您 可以 使用 SQL Alchemy 与 gevent 异步使用,只要您能为您的数据库找到与 gevent 兼容的驱动程序。 gevent greenlents 很好地映射到 scoped_session
.
编辑:实际上,您 可以 将 SQL Alchemy 与 asyncio 结合使用,只要您能为您的数据库找到与 asyncio 兼容的驱动程序,例如https://github.com/aio-libs/aiopg。至于scoped_session
,使用current_task
,在你的web framework请求端销毁。