[英]Is there an established memoize on-disk decorator for python?
我一直在尋找一個python模塊,它提供了一個具有以下功能的memoize裝飾器:
我找到了一些用於此任務的小代碼片段,並且可能自己實現了一個,但我更願意為此任務創建一個已建立的軟件包。 我也發現了incpy ,但這似乎不適用於標准的python解釋器。
理想情況下,我希望在磁盤上有functools.lru_cache
和緩存存儲。 有人能指點我這個合適的套餐嗎?
我意識到這是一個有兩年之久的問題,而且這不會算作“已建立”的裝飾者,而是......
這很簡單,你真的不需要擔心只使用已建立的代碼。 該模塊的文檔鏈接到源,因為除了它本身有用之外,它還可以作為示例代碼。
那么,你需要添加什么? 添加filename
參數。 在運行時, pickle.load
將文件名pickle.load
到cache
,如果失敗則使用{}
。 添加一個cache_save
函數,只需將緩存pickle.save
的緩存添加到鎖定下的文件中。 將該函數附加到與現有函數相同的wrapper
( cache_info
等)。
如果您想自動保存緩存,而不是將其留給調用者,那很容易; 這只是一個什么時候這樣做的問題。 你提出的任何選項 - atexit.register
,添加一個save_every
參數,以便它保存每個save_every
未命中,...... - 實現起來很簡單。 在這個答案中,我展示了它的工作量很少。 或者你可以在GitHub上獲得一個完整的工作版本(定制或使用原樣)。
還有其他方法可以擴展它 - 在cache_info
放置一些與保存相關的統計信息(自上次保存以來的最后保存時間,命中和未命中,...),復制緩存並將其保存在后台線程中,而不是將其保存cache_info
聯中,等等但我想不出任何值得做的事情並不容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.