2016-03-02 57 views
2

Python3functools插件中,有一個將會記憶函數調用的裝飾器。lru_cache轉儲到文件中並再次加載回內存

有沒有辦法讓我將這個緩存轉儲到一個文件中,然後再把這個文件加載回內存?

我在functools文檔中找不到此功能。推薦的方法是什麼才能達到上述要求,最好是僅涉及Python的解決方案?

+1

可能重複使用:http://stackoverflow.com/questions/15585493/store-the-cache-to-a -file-functools-LRU緩存功能於蟒蛇-3-2 – MaxU

回答

1

我不知道解決此問題的標準方法。 但是你可以寫你的註釋是這樣的:

def diskcached(cachefile, saveafter=1): 
    def cacheondisk(fn): 
     try: 
      with open(cachefile, 'rb') as f: 
       cache = pickle.load(f) 
     except: 
      cache = {} 
     unsaved = [0] 

     @wraps(fn) 
     def usingcache(*args, **kwargs): 
      try: 
       key = hash((args, kwargs)) 
      except TypeError: 
       key = repr((args, kwargs)) 
      try: 
       ret = cache[key] 
      except KeyError: 
       ret = cache[key] = fn(*args, **kwargs) 
       unsaved[0] += 1 
       if unsaved[0] >= saveafter: 
        with open(cachefile, 'wb') as f: 
         pickle.dump(cache, f) 
        unsaved[0] = 0 
      return ret 

     return usingcache 

    return cacheondisk 

@diskcached("filename_to_save") 
def your_function(): 
    ... 
相關問題