2011-08-29 88 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文件等等。實際上它比這更復雜一些,但是現在它可以工作。對不起,可能會造成混淆。