2007年03月28日 星期三 17:24
ÕâÁ½ÌìÑо¿django»º´æ£¬ÊµÔÚÄջ𣬠Êý¾ÝµÄ»º´æÊÇûʲôÎÊÌ⣬¼´£ºÉèÖà cache.set("test",data, 60*60*24)£¬¶ÁÈ¡ cache.get("test"), ÔÚviews.pyµÄ·½·¨Ç°ÉèÖûº´æÈ磺 @cache_page(10*60)£¬Ö´ÐÐÌáʾ 'function' object has no attribute 'method'£¬ ÒÔÉÏÊÇÔÚWINÉϽøÐвâÊԵģ¬Ô±¾ÒÔΪÊÇsetting.pyÎļþÖÐÉèÖõĻº´æÀàÐͲ»Ö§³Ö£¬È磺CACHE_BACKEND = 'locmem:///c:/tem/£¬¶ø¹«Ë¾·þÎñÆ÷ÉÏʹÓõÄlinuxϵͳ£¬ËùÒÔ½ñÌìÒ»ÕûÌì¾ÍÔÚlinux»·¾³À´½øÐе÷ÊÔ¡£¡£¡£¡£ °²×°memcached£¬Æô¶¯£¬ÔÙ½øÐвâÊÔ£¬°´ÕÕÔÚwinÉÏÉèÖÃ@cache_page(10*60)ÒÀÈ»³öÏÖͬÑù´íÎóÌáʾ£¬È磺'function' object has no attribute 'method' »»ÖÖ·½Ê½£¬ÔÚurls.pyÖÐÉèÖ㬠Èç(r'^c(?P\w+)-b1/$',cache_page(VerifyPostList,10*60)),²»»á³öÈκδíÎóÌáʾ£¬ÕâÀï²»ÖªµÀÔõôÀ´²âÊÔÊÇ·ñÊÇÔÚÈ¡»º´æÀïµÄ¶«Î÷£¬ËùÒÔÓÃÖÖºÜÀÏÍÁµÄ·½Ê½²âÊÔ£¬£¬ 1¡¢¹Ø±Õmemcached£¬ÖØÆô»úÆ÷£¬ÔÚurls.pyÖв»ÉèÖûº´æ£¬´òÓ¡³ÌÐòÖ´ÐÐʱ¼ä£¬ 2¡¢¿ªÆômemcached£¬ÖØÆô»úÆ÷£¬ÔÚurls.pyÖÐÉèÖûº´æ£¬´òÓ¡³ÌÐòÖ´ÐÐʱ¼ä£¬ Èç´ËÖØ¸´ÒÔÉϼ¸¸ö²¼Öã¬NND£¬·¢ÏÖÁ½ÖÖ²¼ÖóÌÐòÖ´ÐеÄʱ¼ä¶¼²î²»¶à£¬£¬£¬ ÍøÉϲéÕÒÁ˺öà×ÊÁÏ£¬°üÀ¨Ó¢ÎÄ ¶¼Ã»·¢ÏÖÓÐdjangoÖÐcacheʵÏÖÔÀíµÄ×ÊÁÏ£¬¿´Ô´ÂëµÄ»°£¬Ïë±Ø´ó¼Ò¶¼ÖªµÀpythonÖеÄÔ´ÂëʵÔÚÊÇÄÑ¿´¶®¡£¡£¡£ ˵ÁËÕâô¶à£¬»¹ÊÇ×ܽáÒÔÏÂÎÒµÄÎÊÌâ¼°ÏëÒªÁ˽âµÄ¶«Î÷°É£¬ ÎÊÌâÒ»£ºÓÐÐÖµÜÓùý@cache_page²¢³É¹¦¹ýµÄÂ𣿠ÎÊÌâ¶þ£ºÔÚviews.pyÖж¨ÒåµÄ@cache_pageÓëÔÚurls.pyÖж¨ÒåµÄcache_page ÓÐʲô²»Í¬£¿ÎªºÎÎÒÒÔÉϵ÷ÊÔ²âÊÔ³ÌÐòµÄÖ´ÐÐʱ¼ä¶¼Ò»Ñù£¿ ÎÊÌâÈý£ºÏëʵÏÖÄÜÕÒµ½cache_pageÖлº´æÒ³ÃæµÄ»úÖÆ£¬¼´ÏëÔÚcacheÖÐÕÒµ½»º´æÒ³ÃæµÄkey£¬ÕâÑù»òÐíÓпÉÄÜÎÒÃÇÔÚºǫ́³ÌÐòÀï¿ÉÒÔÖ±½Ó»ñµÃÓëÐÞ¸ÄÕâ¸ökeyÖеÄÖµ¡£¡£ -------------- 下一部分 -------------- Ò»¸öHTML¸½¼þ±»ÒƳý... URL: http://python.cn/pipermail/python-chinese/attachments/20070328/7510acfb/attachment.htm
2007年03月28日 星期三 19:31
我看了下代码,cache_page 不是标准的 decorator ,不能 @cache_page 这么用。 另外,python 代码很好看啊,怎么会难看懂呢。大部分代码都是平坦的一层,极少看到深层的抽象。 cache_page 在 views/decorators.py line 18 定义。 decorator_from_middleware 函数在 utils/decorators.py ,它返回一个 decorator ,作用是在调用 views 的前后调用相应的 middleware 代码(process_request, process_view, process_response)。middleware 放在 settings 里面是对整个站点起作用,而这个函数实际是让 middleware 只对单个views 起作用。 这里 middleware 就是 middleware/cache.py 的 CacheMiddleware 了,他去使用 django.core.cache 包,这里是真正实现 cache 的地方。 core/cache/__init__.py 根据配置创建 cache 对象。cache 对象的实现就在 backends 包中不同的后端中,这些后端中的 CacheClass 类都实现了同一个协议 (get, set ,delete, get_many, has_key)。 memcached.py 的代码也很少,就是调用 memcache 模块的 api 而已。 On 3/28/07, 老生 <liangzhengzhang at gmail.com> wrote: > > 这两天研究django缓存,实在恼火, > > 数据的缓存是没什么问题,即:设置 cache.set("test",data, 60*60*24),读取 cache.get("test"), > > 在views.py的方法前设置缓存如: @cache_page(10*60),执行提示 'function' object has no > attribute 'method', > > 以上是在WIN上进行测试的,原本以为是setting.py文件中设置的缓存类型不支持,如:CACHE_BACKEND = > 'locmem:///c:/tem/,而公司服务器上使用的linux系统,所以今天一整天就在linux环境来进行调试。。。。 > > 安装memcached,启动,再进行测试,按照在win上设置@cache_page(10*60)依然出现同样错误提示,如:'function' > object has no attribute 'method' > > 换种方式,在urls.py中设置, > 如(r'^c(?P\w+)-b1/$',cache_page(VerifyPostList,10*60)),不会出任何错误提示,这里不知道怎么来测试是否是在取缓存里的东西,所以用种很老土的方式测试,, > > 1、关闭memcached,重启机器,在urls.py中不设置缓存,打印程序执行时间, > > 2、开启memcached,重启机器,在urls.py中设置缓存,打印程序执行时间, > > 如此重复以上几个布置,NND,发现两种布置程序执行的时间都差不多,,, > > 网上查找了好多资料,包括英文 都没发现有django中cache实现原理的资料,看源码的话,想必大家都知道python中的源码实在是难看懂。。。 > > > > 说了这么多,还是总结以下我的问题及想要了解的东西吧, > > > 问题一:有兄弟用过@cache_page并成功过的吗? > > 问题二:在views.py中定义的@cache_page与在urls.py中定义的cache_page > 有什么不同?为何我以上调试测试程序的执行时间都一样? > > > 问题三:想实现能找到cache_page中缓存页面的机制,即想在cache中找到缓存页面的key,这样或许有可能我们在后台程序里可以直接获得与修改这个key中的值。。 > > > > > _______________________________________________ > python-chinese > Post: send python-chinese at lists.python.cn > Subscribe: send subscribe to python-chinese-request at lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request at lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese > -- http://codeplayer.blogspot.com/ -------------- next part -------------- An HTML attachment was scrubbed... URL: http://python.cn/pipermail/python-chinese/attachments/20070328/8ca680d9/attachment-0001.htm
2007年03月28日 星期三 19:36
事实上,如果可以从缓存中取到数据的话,是根本不会调用你的 view 代码的,你想测试缓存是否真的起了作用的话,在 view 里面做手脚就可以,比如 log 个 helloworld,然后多次请求发现确实只有一个 helloworld 。 On 3/28/07, 老生 <liangzhengzhang at gmail.com> wrote: > > 这两天研究django缓存,实在恼火, > > 数据的缓存是没什么问题,即:设置 cache.set("test",data, 60*60*24),读取 cache.get("test"), > > 在views.py的方法前设置缓存如: @cache_page(10*60),执行提示 'function' object has no > attribute 'method', > > 以上是在WIN上进行测试的,原本以为是setting.py文件中设置的缓存类型不支持,如:CACHE_BACKEND = > 'locmem:///c:/tem/,而公司服务器上使用的linux系统,所以今天一整天就在linux环境来进行调试。。。。 > > 安装memcached,启动,再进行测试,按照在win上设置@cache_page(10*60)依然出现同样错误提示,如:'function' > object has no attribute 'method' > > 换种方式,在urls.py中设置, > 如(r'^c(?P\w+)-b1/$',cache_page(VerifyPostList,10*60)),不会出任何错误提示,这里不知道怎么来测试是否是在取缓存里的东西,所以用种很老土的方式测试,, > > 1、关闭memcached,重启机器,在urls.py中不设置缓存,打印程序执行时间, > > 2、开启memcached,重启机器,在urls.py中设置缓存,打印程序执行时间, > > 如此重复以上几个布置,NND,发现两种布置程序执行的时间都差不多,,, > > 网上查找了好多资料,包括英文 都没发现有django中cache实现原理的资料,看源码的话,想必大家都知道python中的源码实在是难看懂。。。 > > > > 说了这么多,还是总结以下我的问题及想要了解的东西吧, > > > 问题一:有兄弟用过@cache_page并成功过的吗? > > 问题二:在views.py中定义的@cache_page与在urls.py中定义的cache_page > 有什么不同?为何我以上调试测试程序的执行时间都一样? > > > 问题三:想实现能找到cache_page中缓存页面的机制,即想在cache中找到缓存页面的key,这样或许有可能我们在后台程序里可以直接获得与修改这个key中的值。。 > > > > > _______________________________________________ > python-chinese > Post: send python-chinese at lists.python.cn > Subscribe: send subscribe to python-chinese-request at lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request at lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese > -- http://codeplayer.blogspot.com/ -------------- next part -------------- An HTML attachment was scrubbed... URL: http://python.cn/pipermail/python-chinese/attachments/20070328/4ea95167/attachment.htm
2007年03月29日 星期四 10:03
лл*yi huang* £¬ÔÚ¹Ù·½µÄÎĵµÉϾÍÕâôдµÄpython2.4»òÕßÒÔÉϵİ汾¿ÉÒÔʹÓà @cache_page£¬Õ溹ѽ¡£¡£¡£ ×òÌìÍíÉϻؼÒÒ²ÏëÁ˺ܾ㬴òËã½ñÌì´ÓÍ·½øÐпªÊ¼µ÷ÊÔ£¬¿´ÁËÄãµÄ·ÖÎö£¬×Åʵѧϰµ½²»ÉÙ¡£¡£ ÏÈлÁË£¬ÓÐÎÊÌâÔÙÏò´ó¼ÒÌֽ̡£¡£¡£ ÔÚ07-3-28£¬yi huang <yi.codeplayer在gmail.com> дµÀ£º > > ÎÒ¿´ÁËÏ´úÂ룬cache_page ²»ÊDZê×¼µÄ decorator £¬²»ÄÜ @cache_page ÕâôÓᣠ> ÁíÍ⣬python ´úÂëºÜºÃ¿´°¡£¬Ôõô»áÄÑ¿´¶®ÄØ¡£´ó²¿·Ö´úÂë¶¼ÊÇÆ½Ì¹µÄÒ»²ã£¬¼«ÉÙ¿´µ½Éî²ãµÄ³éÏó¡£ > > cache_page ÔÚ views/decorators.py line 18 ¶¨Òå¡£ > decorator_from_middleware º¯ÊýÔÚ utils/decorators.py £¬Ëü·µ»ØÒ»¸ö decorator £¬×÷ÓÃÊÇÔÚµ÷Óà > views µÄǰºóµ÷ÓÃÏàÓ¦µÄ middleware ´úÂ루process_request, process_view, > process_response£©¡£middleware ·ÅÔÚ settings ÀïÃæÊǶÔÕû¸öÕ¾µãÆð×÷Ó㬶øÕâ¸öº¯Êýʵ¼ÊÊÇÈà middleware > Ö»¶Ôµ¥¸öviews Æð×÷Óᣠ> ÕâÀï middleware ¾ÍÊÇ middleware/cache.py µÄ CacheMiddleware ÁË£¬ËûȥʹÓà > django.core.cache °ü£¬ÕâÀïÊÇÕæÕýʵÏÖ cache µÄµØ·½¡£ > core/cache/__init__.py ¸ù¾ÝÅäÖô´½¨ cache ¶ÔÏó¡£cache ¶ÔÏóµÄʵÏÖ¾ÍÔÚ backends > °üÖв»Í¬µÄºó¶ËÖУ¬ÕâЩºó¶ËÖÐµÄ CacheClass À඼ʵÏÖÁËͬһ¸öÐÒé (get, set ,delete, get_many, has_key)¡£ > memcached.py µÄ´úÂëÒ²ºÜÉÙ£¬¾ÍÊǵ÷Óà memcache Ä£¿éµÄ api ¶øÒÑ¡£ > > On 3/28/07, ÀÏÉú <liangzhengzhang在gmail.com> wrote: > > > ÕâÁ½ÌìÑо¿django»º´æ£¬ÊµÔÚÄջ𣬠> > > > Êý¾ÝµÄ»º´æÊÇûʲôÎÊÌ⣬¼´£ºÉèÖà cache.set("test",data, 60*60*24)£¬¶ÁÈ¡ cache.get("test"), > > > > ÔÚviews.pyµÄ·½·¨Ç°ÉèÖûº´æÈ磺 @cache_page(10*60)£¬Ö´ÐÐÌáʾ 'function' object has no > > attribute 'method'£¬ > > > > ÒÔÉÏÊÇÔÚWINÉϽøÐвâÊԵģ¬Ô±¾ÒÔΪÊÇsetting.pyÎļþÖÐÉèÖõĻº´æÀàÐͲ»Ö§³Ö£¬È磺CACHE_BACKEND = > > 'locmem:///c:/tem/£¬¶ø¹«Ë¾·þÎñÆ÷ÉÏʹÓõÄlinuxϵͳ£¬ËùÒÔ½ñÌìÒ»ÕûÌì¾ÍÔÚlinux»·¾³À´½øÐе÷ÊÔ¡£¡£¡£¡£ > > > > °²×°memcached£¬Æô¶¯£¬ÔÙ½øÐвâÊÔ£¬°´ÕÕÔÚwinÉÏÉèÖÃ@cache_page(10*60)ÒÀÈ»³öÏÖͬÑù´íÎóÌáʾ£¬È磺'function' > > object has no attribute 'method' > > > > »»ÖÖ·½Ê½£¬ÔÚurls.pyÖÐÉèÖ㬠> > Èç(r'^c(?P\w+)-b1/$',cache_page(VerifyPostList,10*60)),²»»á³öÈκδíÎóÌáʾ£¬ÕâÀï²»ÖªµÀÔõôÀ´²âÊÔÊÇ·ñÊÇÔÚÈ¡»º´æÀïµÄ¶«Î÷£¬ËùÒÔÓÃÖÖºÜÀÏÍÁµÄ·½Ê½²âÊÔ£¬£¬ > > > > 1¡¢¹Ø±Õmemcached£¬ÖØÆô»úÆ÷£¬ÔÚurls.pyÖв»ÉèÖûº´æ£¬´òÓ¡³ÌÐòÖ´ÐÐʱ¼ä£¬ > > > > 2¡¢¿ªÆômemcached£¬ÖØÆô»úÆ÷£¬ÔÚurls.pyÖÐÉèÖûº´æ£¬´òÓ¡³ÌÐòÖ´ÐÐʱ¼ä£¬ > > > > Èç´ËÖØ¸´ÒÔÉϼ¸¸ö²¼Öã¬NND£¬·¢ÏÖÁ½ÖÖ²¼ÖóÌÐòÖ´ÐеÄʱ¼ä¶¼²î²»¶à£¬£¬£¬ > > > > ÍøÉϲéÕÒÁ˺öà×ÊÁÏ£¬°üÀ¨Ó¢ÎÄ ¶¼Ã»·¢ÏÖÓÐdjangoÖÐcacheʵÏÖÔÀíµÄ×ÊÁÏ£¬¿´Ô´ÂëµÄ»°£¬Ïë±Ø´ó¼Ò¶¼ÖªµÀpythonÖеÄÔ´ÂëʵÔÚÊÇÄÑ¿´¶®¡£¡£¡£ > > > > > > > > ˵ÁËÕâô¶à£¬»¹ÊÇ×ܽáÒÔÏÂÎÒµÄÎÊÌâ¼°ÏëÒªÁ˽âµÄ¶«Î÷°É£¬ > > > > > > ÎÊÌâÒ»£ºÓÐÐÖµÜÓùý@cache_page²¢³É¹¦¹ýµÄÂ𣿠> > > > ÎÊÌâ¶þ£ºÔÚviews.pyÖж¨ÒåµÄ@cache_pageÓëÔÚurls.pyÖж¨ÒåµÄcache_page > > ÓÐʲô²»Í¬£¿ÎªºÎÎÒÒÔÉϵ÷ÊÔ²âÊÔ³ÌÐòµÄÖ´ÐÐʱ¼ä¶¼Ò»Ñù£¿ > > > > > > ÎÊÌâÈý£ºÏëʵÏÖÄÜÕÒµ½cache_pageÖлº´æÒ³ÃæµÄ»úÖÆ£¬¼´ÏëÔÚcacheÖÐÕÒµ½»º´æÒ³ÃæµÄkey£¬ÕâÑù»òÐíÓпÉÄÜÎÒÃÇÔÚºǫ́³ÌÐòÀï¿ÉÒÔÖ±½Ó»ñµÃÓëÐÞ¸ÄÕâ¸ökeyÖеÄÖµ¡£¡£ > > > > > > > > > > _______________________________________________ > > python-chinese > > Post: send python-chinese在lists.python.cn > > Subscribe: send subscribe to python-chinese-request在lists.python.cn > > Unsubscribe: send unsubscribe to > > python-chinese-request在lists.python.cn > > Detail Info: http://python.cn/mailman/listinfo/python-chinese > > > > > > -- > http://codeplayer.blogspot.com/ > _______________________________________________ > python-chinese > Post: send python-chinese在lists.python.cn > Subscribe: send subscribe to python-chinese-request在lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese > -------------- 下一部分 -------------- Ò»¸öHTML¸½¼þ±»ÒƳý... URL: http://python.cn/pipermail/python-chinese/attachments/20070329/dbd4fb16/attachment-0001.htm
2007年03月30日 星期五 13:27
½ñÌì×ÜËãÊǵ÷ͨÁËdjangoÖеÄcacheµÄcache_page£¬×òÌìÔÚµ÷ÊÔÖгöÏÖÒ»¸öµÍ¼¶µÄ´íÎó£¬djangoÓëmemcache¸ù±¾Ã»½»»¥£¬ÎÊÌâÔÚÓÚÆô¶¯memcacheʱû°ó¶¨IP£¬ ÔÏÈÒÔΪËüĬÈϾÍ127.0.0.1£¬ÏÖÔÚÖ¸¶¨IP¾Í¿ÉÒÔÕý³£µ÷ÊÔÁË¡£¡£¡£ -------------- 下一部分 -------------- Ò»¸öHTML¸½¼þ±»ÒƳý... URL: http://python.cn/pipermail/python-chinese/attachments/20070330/238c4dc5/attachment.html
Zeuux © 2025
京ICP备05028076号