首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >独立的web2py-使用金字塔的DAL-请求、线程和内存

独立的web2py-使用金字塔的DAL-请求、线程和内存
EN

Stack Overflow用户
提问于 2011-04-04 22:11:50
回答 2查看 723关注 0票数 3

我正在金字塔框架上建立一个应用程序,并想使用它的web2py-DAL。Firebird-embedded是首选的数据库。

这很有效,直到我尝试从一个网页异步调用多个视图。来自kinterbasdb驱动程序的不同错误,如“无效游标状态”、“无效游标引用”或“尝试重新关闭已关闭的游标”,sqlite只是在没有任何错误消息的情况下崩溃,并使用python。这些视图可调用代码除了由SELECTing进行简单的读取外,什么也不做。

这发生在金字塔根工厂为每个请求返回相同的DAL对象的情况下。似乎来自不同请求的线程正在使用相同的游标对象,所以游标被关闭,而另一个线程假定游标在这里。

如果我在每个请求上创建一个新的DAL对象,我会遇到另一个问题--每个请求上的每个新连接都会分配内存,而这个内存不会被释放。因此,在一些文档请求之后,会有数百MB的内存被浪费。

不幸的是,Sqlalchemy不是这个项目的选项。

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-07 02:09:27

重点是应该在每个请求上创建DAL对象。但在此之后,必须手动关闭。

我是这样做的:有一个

代码语言:javascript
复制
request.add_finished_callback

属性,所以我以这种方式扩展了DAL对象:

代码语言:javascript
复制
class Root(DAL):
    def __init__(self, request, uri):
        DAL.__init__(self, uri, pool_size=0)
        request.add_finished_callback(self._close)

    def _close(self, request):
        self._adapter.close_all_instances('commit')

然后,root_factory在每次请求时返回一个新的根对象。

感谢web2py-users小组!

票数 2
EN

Stack Overflow用户

发布于 2011-04-06 20:18:22

web2py邮件列表中的Some solutions

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5539722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档