使用webpy的线程特定数据

2024-03-29 04:42:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用webpy编写一个小web应用程序,我想知道是否有人对我遇到的一个小问题有任何信息。在

我写了一个小ORM系统,它似乎运行得很好。理想情况下,我希望将其与webpy缝合在一起,但似乎只是按原样使用它会导致线程问题(DB connection是跨线程边界实例化/访问的,或者是异常状态)。在

有人知道我如何(在webpy中)在与页面处理代码其余部分相同的线程上创建DB连接吗?在


Tags: 实例web信息应用程序db状态系统orm
2条回答

我们使用SQLAlchemy网页.py并使用钩子为每个请求创建和关闭数据库连接。SQLAlchemy处理池,因此并非每个连接都是tcp连接。在

要使用的线程本地存储是网站.ctx也就是说,任何时候你进入网站.ctx您只能看到由该线程设置的属性。在

我们的代码如下所示:

def sa_load_hook():
    web.ctx.sadb = Session()

def sa_unload_hook():
    web.ctx.sadb.close()

web.loadhooks['sasession'] = sa_load_hook
web.unloadhooks['sasession'] = sa_unload_hook

将Session替换为db connection函数,它应该可以正常工作。在

我试试这个。免责声明:我对网页.py框架。在

我建议您尝试以下方法:

(1)创建全局线程.local实例来跟踪线程本地对象(在您的情况下,它将只跟踪一个对象,一个数据库会话)。在

import threading
serving = threading.local()

(2)在每个请求开始时,创建一个db连接/会话并将其保存在线程.local实例。如果我正确理解web.py documentation,您可以执行以下操作:

^{pr2}$

(3)在控制器方法中(如果它们在web.py?),无论何时需要数据库连接,请使用服务.dbconnection. 在

相关问题 更多 >