标题:django中使用psyco报错问题的解决
取消只看楼主
codelet
Rank: 2
来 自:广东深圳
等 级:论坛游民
帖 子:61
专家分:37
注 册:2007-11-6
结帖率:100%
已结贴  问题点数:0 回复次数:1 
django中使用psyco报错问题的解决
我用django创建了一个网站。一开始功能比较简单,运行效果良好。
   
    为了增加session管理,我照着django教程里面的例子,使用了数据库。
settings.py中定义如下:
    DATABASE_ENGINE = 'sqlite3'           
    DATABASE_NAME = './session.db'  

给每个新请求添加一个session标识:request.session["uid"] = uid;每个请求上来的时候,通过request.session.get("uid")获取客户端带上来的sessionid.
    到了这里运行情况都是正常的。没有出现问题。

    后来业务逻辑变得复杂了,效率问题凸现。于是我想引入psyco模块,给整个后台提速。在每个业务模块的开头添加psyco.
代码是这样添加的:
try:
    import psyco
    psyco.full()
except:
    pass


    这时候问题出现了。客户端请求服务器时,有的业务工作正常,有的业务逻辑报一个错误:
TypeError at /do
descriptor '__dict__' for 'Empty' objects doesn't apply to 'BaseQuery' object


    经过观察分析发现:当访问一些没有用到session的页面时,服务器正常响应客户端。一旦执行有关session处理的业务就会出现上面的那种错误了。

    这时候我把psyco注释掉,所有业务又都工作正常了。

    经过再三思考,出错提示那里描述的内容是与数据库相关的,因此我想,会不会是因为psyco模块和session数据库(sqlite3)有冲突呢?我单独验证了一下包含了request.session.get("uid")方法调用的模块,果然问题就出在这里。只要是在request.session.get("uid")方法定义之前使用了psyco,都会出问题。

    找到问题的原因就好办了。当我尝试在request.session.get("uid")方法之后添加以下代码(并且该模块的导入模块中都不能包含psyco):

try:
    import psyco
    psyco.bind(method/class)
except:
    pass


    所有业务顺利通过!!!!
   

    经过简单验证,用了psyco模块,后台执行效率提高了不少

   ps:其他数据库是不是都有这个问题? 有时间再去验证~~~
搜索更多相关主题的帖子: psyco 报错 django 
2009-08-26 16:41
codelet
Rank: 2
来 自:广东深圳
等 级:论坛游民
帖 子:61
专家分:37
注 册:2007-11-6
得分:0 
发现我自己对于工作学习上碰到的问题还是不够钻,浅尝辄止。像这个问题,只是表面解决了,但实际上还是没有找到问题具体的所在以及根本的解决方法。
自省自省。

Losing emotion, Finding devotion.
2009-08-27 13:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-283774-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014539 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved