【发布时间】:2011-12-30 00:30:40
【问题描述】:
使用 tornado,我想创建一些中间件魔术,以确保我的 SQLAlchemy 会话正确关闭/清理,以便对象不会从一个请求共享到下一个请求。诀窍在于,由于我的一些龙卷风处理程序是异步的,我不能只为每个请求共享一个会话。
所以我试图创建一个 ScopedSession,它知道如何为每个请求创建一个新会话。我需要做的就是为我的代码定义一个范围函数,它可以将当前执行的请求转换为某种唯一键,但是我似乎无法弄清楚如何 get 当前请求任何一个时间点(在当前 RequestHandler 的范围之外,我的函数也无权访问)。
我可以做些什么来完成这项工作吗?
【问题讨论】:
-
我根本不知道龙卷风,但您可能希望将 Session 与请求本身相关联(即,如果不方便,请不要使用 scopedsession)。那么你可以说request.session。仍然需要在开始/结束时设置/拆卸钩子。
-
@zzzeek 如果您将此作为答案发布,我会将其标记为正确!我想得越多,我就越意识到你是对的——这是获得我需要的最快和最容易理解的方式。谢谢!
-
我也有同样的想法,在所有异步处理程序之间共享通过 scopped_session 创建的会话会造成不一致,对吧?假设在一个处理程序中,我可能会在处理程序结束时调用 scopped_session.remove() 但其他处理程序(异步运行)可能仍在使用它!
标签: python sqlalchemy tornado