Sqlalchemy会议和高速公路

时间:2014-01-26 15:56:57

标签: sqlalchemy twisted autobahn

我正在使用twisted中的高速公路服务器来提供RPC API。有些调用需要查询数据库,多个客户端可以通过websocket连接到服务器。

我正在使用SqlAlchemy ORM访问数据库。

以下两种处理SqlAlchemy会话的方法有哪些优缺点。

  1. 为每个RPC调用创建并销毁会话
  2. 在服务器启动时创建单个会话,并在每次RPC调用中使用它
  3. 你会推荐哪个?为什么? (我倾向于2)

2 个答案:

答案 0 :(得分:3)

使用PostgreSQL,Oracle或SQLite等数据库从Twisted(和Autobahn)进行基于SQL的数据库访问的推荐方法是twisted.enterprise.adbapi

twisted.enterprise.adbapi将在后台线程池上运行查询,这是必需的,因为大多数数据库驱动程序都是阻塞的。

  

旁注:对于PostgreSQL,存在本地异步,非阻塞   司机还:txpostgres

现在,如果你在本机SQL驱动程序之上放置一个像SQLAlchemy这样的ORM,我不确定它如何与twisted.enterprise.adbapi一起工作(如果有的话)。

所以你提到的选项

  1. 是不行,因为大多数驱动程序都在阻塞(并且高速公路的RPC在主线程上运行=扭曲的反应堆线程 - 你必须不阻止它。)
  2. 这样,您需要将数据库会话放在后台线程中(同样,不要阻止)。
  3. 另见here

答案 1 :(得分:1)

如果您同时使用SQLAlchemy和Twisted,请考虑使用Alchimia而不是内置adbapi