2016-04-06 36 views
1

Ben functools gelen dekoratör @lru_cache(maxsize=None) kullanıyorum ve onlara ben kodu her çalıştırdığınızda yeniden hesaplama önlemek için bir dosyaya memoized değerleri kaydetmek için wan't.Python'da lru_cache nasıl dışa aktarılır?

Baskı args ve değerlerinden bir dosyaya ve daha sonra bunları okumaktan farklı bir şekilde yapmanın zarif bir yolu var mı?

+1

functools.lru_cache() işlevi, rastgele konumsal ve anahtar kelime bağımsız değişkenleri ve muhtemelen maksimum önbellek boyutu ile çalışmak üzere tasarlanmıştır. Bu özelliklere ihtiyacınız yoksa, kendi önbellek (aka memoize) dekoratörünü kullanmak çok zor değil. Önbellek sadece bir sözlüktür, bu sayede bir diske (veya buna bakmak isteyebiliyorsanız json) diske kaydetmek ve daha sonra yeniden yüklemek için bir işlev sağlayabilirsiniz. Lru_cache kaynak kodu da [kullanılabilir] (https://hg.python.org/cpython/file/3.4/Lib/functools.py); ihtiyaçlarınızı karşılamak için değiştirin. – RootTwo

+0

@RootTwo Bu yorumu cevap olarak ekleyebilir misiniz? Bu aradığım cevap aslında. –

cevap

0

@Carlos Pinzón, istediğiniz bir yanıt olarak gönderildi: functools.lru_cache() isteğe bağlı konumsal ve anahtar kelime argümanları ve muhtemelen maksimum önbellek boyutu ile çalışmak üzere tasarlanmıştır. Bu özelliklere ihtiyacınız yoksa, kendi önbellek (aka memoize) dekoratörünü kullanmak çok zor değil. Önbellek sadece bir sözlüktür, bu sayede bir diske (veya buna bakmak isteyebiliyorsanız json) diske kaydetmek ve daha sonra yeniden yüklemek için bir işlev sağlayabilirsiniz. Lru_cache kaynak kodu da mevcuttur; ihtiyaçlarınızı karşılamak için değiştirin.

0

Hayır, bunu yapmak için tek yol .cache_info() fonksiyonu için bilgi almak ve dosyaya yazmak için olduğunu düşünüyorum.

Gereksinim duyduğunuz bilgileri içeren bir CacheInfo nesnesi olur.

+1

_CacheInfo nesnesi yalnızca önbellek istatistiklerini kaydeder: isabet, eksik, maksimum boyut ve geçerli boyut. Önbelleği kurtarmanıza ve geri yüklemenize izin veren hiçbir şey yok. – RootTwo

İlgili konular