在GAE中使用记录系统
2009 2 20 06:00 PM 2138次查看
分类:Google App Engine 标签:Google App Engine, Python
这里有篇讲述如何在GAE中使用记录系统的文章。
先简单介绍下logging。
logging中有6个级别的事件记录:CRITICAL、ERROR、WARNING、INFO、DEBUG和NOTSET。
其中前5个分别用critical、error、warning、info和debug函数来记录。
因为使用非常简单,我就直接给演示代码了。
这是一段记录缓存使用情况的代码片段:
from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.api import memcache
import logging
counter = -10000
def getImageCounter():
global counter
if counter <= 0:
logging.info('Get ImageCounter from memcache.')
counter = memcache.get('ImageCounter')
if counter is None:
logging.warning('Get ImageCounter from DB.')
counter = Image.all().count()
if counter:
memcache.add('ImageCounter', counter)
return counter
class UploadImage(webapp.RequestHandler):
def post(self):
image = Image()
image.content = self.request.get("img")
try:
image.put()
global counter
counter += 1
memcache.incr('ImageCounter')
except:
logging.error('Store error.')
可以看到,我将counter初始化为-10000,它是应该不会出现的值。每次更新Handler Script缓存时它就会被设为-10000,于是在getImageCounter函数中就会出现counter <= 0的情况,此时就会记录一条info信息,并尝试从memcache中获取。
如果memcache中也获取不到,就记录一天warning信息,并尝试从数据库中获取。
而在更新值时,就得同步Handler Script缓存、memcache和数据库了。
至于将counter初始化为-10000,是因为UploadImage.get中可能将其增加,所以就设大点,只要并发少于10000就没关系。
当然你也可以直接用memcache来初始化,这样甚至不必再UploadImage.get中判断memcache;不过这样可能会导致多使用几次memcache API。(估计一天也多不了几十次。)
0条评论 你不来一发么↓