関数とメソッドのキャッシュを使いやすくします。
supercache関数やメソッドを操作するデコレーターとして設計されており、追加のコード行を 1 行追加するだけでほぼ即時に繰り返し実行できます。これは、キャッシュ エンジンへのインターフェイスとして機能します。キャッシュ エンジンは、メモリ内でのキャッシュから Redis の使用まで (コード化されている場合に限り) 何でも可能です。
デコレーターはパフォーマンスよりも利便性と安定性を目的として設計されているため、使用すると少量のオーバーヘッドが追加されることに注意してください。非常に単純な関数をキャッシュすると、パフォーマンスが低下する可能性があります (実行にはおよそ 40,000 回あたり 1 秒かかります)。
pip install supercache
from supercache import cache
# Basic cache
@ cache ()
def function ( x , y = None ):
return ( x , y )
# Set timeout
@ cache ( ttl = 60 )
def function ( x , y = None ):
return ( x , y )
# Ignore the y argument
@ cache ( ignore = [ 'y' ])
def function ( x , y = None ):
return ( x , y )
# Ignore anything after the first 2 arguments
@ cache ( keys = [ 0 , 1 ])
def function ( x , y = None , * args , ** kwargs ):
return ( x , y )
# Set up a custom cache engine
from supercache . engine import Memory
cache = Cache ( engine = Memory ( mode = Memory . FIFO , ttl = 600 , count = 100000 , size = 100000 ))
# Manually handle cache to reduce the decorator overhead
# This is in danger of collisions if the key is not unique
from supercache . exceptions import CacheError
def function ( x , y = None ):
key = 'function;{};{}' . format ( x , y )
try :
return cache . get ( key )
except CacheError :
value = ( x , y )
cache . put ( key , value )
return value
# Functions
@ cache ()
def function ():
pass
# Methods
class Class ( object ):
@ cache ()
def method ( self ):
pass
# Generators/iterators
@ cache ()
def generator ():
yield
# Lambdas
func = cache ()( lambda : None )
キャッシュ キーの生成に使用する関数のパラメーターを設定します。使用可能なパラメータはすべてデフォルトで使用されます。
これらは、 int
、 str
、 slice
( *args
に便利)、またはregex
( **kwargs
に便利) の形式にすることができます。
キャッシュキーの生成時に無視するパラメータを設定します。これは、 keys
で指定された設定をオーバーライドします。
これらは、 int
、 str
、 slice
、またはregex
の形式にすることもできます。
エンジンの ttl 設定をオーバーライドして、キャッシュが無効になるまでの秒数を設定します。
キャッシュされる関数がジェネレーターの場合、これをTrue
に設定すると、最初に呼び出されたときにイテレーターを返すのではなく、出力がtuple
に変換されます。
その理由は、ジェネレーターのキャッシュには多くのオーバーヘッドがあり、単純なジェネレーターを何千回も呼び出すと、このオーバーヘッドが非常に顕著になる可能性があるためです。
別名: cache[key]
キャッシュの項目を読み取るか、キャッシュが存在しない場合はエラーを発生させます。
別名: cache[key] = value
新しいキャッシュ項目を設定します。
別名: del cache[key]
キーまたは関数のキャッシュを削除します。
cache.delete()
: キャッシュされたデータをすべて削除します。cache.delete(key)
: 特定のkey
のキャッシュされたデータを削除します。cache.delete(func)
: func
を実行するたびにキャッシュされたデータを削除します。cache.delete(func, 1, b=2)
: func(1, b=2)
のキャッシュされたデータを削除します。キーまたは関数に対してキャッシュが読み取られた回数を返します。
cache.hits()
: キャッシュ ヒットの総数。cache.hits(key)
: 特定のkey
のヒット数。cache.hits(func)
: func
の実行ごとのキャッシュ ヒット数。cache.hits(func, 1, b=2)
: func(1, b=2)
専用のキャッシュ ヒット数。キーまたは関数に対してキャッシュが生成された回数を返します。
cache.misses()
: キャッシュミスの合計数。cache.misses(key)
: 特定のkey
のミスの数。cache.misses(func)
: func
の実行ごとのキャッシュミスの数。cache.misses(func, 1, b=2)
: func(1, b=2)
に特化したキャッシュミスの数。キーまたは関数のキャッシュが存在するかどうかを取得します。
cache.exists()
: キャッシュが存在する場合。cache.exists(key)
: key
キャッシュに存在する場合。cache.exists(func)
: func
の実行がキャッシュに存在する場合。cache.exists(func, 1, b=2)
: func(1, b=2)
キャッシュに存在する場合。キャッシュを削除するモードを設定します。オプションは、FIFO (先入れ先出し)、FILO (先入れ後出し)、LRU (最も最近使用されていない)、MRU (最も最近使用されている)、または LFU (最も頻繁に使用されていない) です。
キャッシュが無効になるまでの秒数を設定します。
キャッシュされる結果の最大量を設定します。
キャッシュの最大サイズをバイト単位で設定します。これはソフト制限であり、最初にメモリが割り当てられ、制限以下に戻るまで古いキャッシュが削除されます。
最大サイズが結果より小さく設定されている場合でも、最新の実行は常にキャッシュされます。
classmethods
、 staticmethods
およびproperties
キャッシュ デコレーターが最初に実行された場合にのみキャッシュできます。