함수와 메소드에 대한 캐싱을 사용하기 쉽습니다.
supercache 기능 및 메소드와 함께 작동하고 단 한 줄의 추가 코드만으로 거의 즉각적인 반복 실행을 제공하는 데코레이터로 설계되었습니다. 이는 캐시 엔진에 대한 인터페이스 역할을 하며, 메모리 캐싱부터 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
캐시 데코레이터가 먼저 실행되는 경우에만 캐시될 수 있습니다.