2011-08-29 90 views
2

无法将我的手指放在此错误上。在应用程序的其他部分,它可以正常工作,但不是在这一部分中,唯一不同的是,此代码在线程服务器中运行,而另一部分在预先运行时运行。另一方面,在另一台生产服务器上,它也可以在线程服务器上正常工作。django-keyedcache:NameError:全局名称'tid'未定义

File "/usr/lib/python2.6/site-packages/django/core/handlers/base.py", line 111, in get_response 
    response = callback(request, *callback_args, **callback_kwargs) 

File "/usr/lib/python2.6/site-packages/django/views/decorators/http.py", line 45, in inner 
    return func(request, *args, **kwargs) 

File "/home/asia/myfilm/torrent/tracker.py", line 138, in announce 
    announce_interval = cache_get(ck) 

File "/home/asia/myfilm/keyedcache/__init__.py", line 207, in cache_get 
    cache_set_request(key, obj, uid=tid) 

File "/home/asia/myfilm/keyedcache/__init__.py", line 329, in cache_set_request 
    REQUEST_CACHE[uid][key] = val 

NameError: global name 'tid' is not defined 

代码部分造成这个异常(约行207):

obj = None 
    tid = -1 
    if REQUEST_CACHE['enabled']: 
     tid = cache_get_request_uid() 
     if tid > -1: 
      try: 
       obj = REQUEST_CACHE[tid][key] 
       log.debug('Got from request cache: %s', key) 
      except KeyError: 
       pass 

    if obj == None: 
     obj = cache.get(key) 

    if obj and isinstance(obj, CacheWrapper): 
     CACHE_HITS += 1 
     CACHED_KEYS[key] = True 
     log.debug('got cached [%i/%i]: %s', CACHE_CALLS, CACHE_HITS, key) 
     if obj.inprocess: 
      raise MethodNotFinishedError(obj.val) 

     cache_set_request(key, obj, uid=tid) 

及以下(约行329):

def cache_set_request(key, val, uid=None): 
    if uid == None: 
     uid = cache_get_request_uid() 

    if uid>-1: 
     global REQUEST_CACHE 
     if not uid in REQUEST_CACHE: 
      REQUEST_CACHE[uid] = {key:val} 
     else: 
      REQUEST_CACHE[uid][key] = val 

至于我可以看到,工业贸易署在那里定义,我不明白是什么导致了问题。

+1

哪里定义了REQUEST_CACHE?它在'cache_get'函数中标记为'global'吗? –

+0

@ roman-bodnarchuk它在顶层定义如下:REQUEST_CACHE = {'enabled':False},并在cache_get中标记为全局 – Andrey

回答

0

看来我的设置无效。旧的.pyc文件等等。实际上它比这更复杂一些,但是现在它可以工作。对不起,可能会造成混淆。