lru_cache로 파이썬 함수 캐시하기
lru_cache
파이썬에서 설정하는 가장 쉽고 가장 일반적인 것은 내장된 functools.lru_cache입니다.
from functools import lru_cache
@lru_cache
def get_cars():
print('pulling cars data')
return pd.read_csv("https://waylonwalker.com/cars.csv", storage_options = {'User-Agent': 'Mozilla/5.0'})
lru_cache를 사용하는 경우
동일한 입력으로 함수가 호출될 때마다 동일한 결과를 기대하는 함수가 있을 때마다 lru_cache를 사용할 수 있습니다.
when same *args, **kwargs always return the same value
lru_cache는 하나의 파이썬 프로세스에서만 작동합니다. 여러 하위 프로세스를 실행하거나 동일한 스크립트를 반복해서 실행하는 경우 lru_cache가 작동하지 않습니다.
lru_cache only caches in a single python process
최대 크기
lru_cache는 선택적 매개변수
maxsize
를 사용하여 캐시 크기를 설정할 수 있습니다. 기본적으로 128
로 설정되어 있습니다. 캐시에 더 많거나 적은 항목을 저장하려는 경우 이 값을 조정할 수 있습니다.get_cars
예제는 약간 독특한 예제입니다. 지적했듯이 이 구현은 싱글톤처럼 작동하며 값을 1로 설정하여 캐시에 포함할 항목 수를 정확히 할당하여 캐시 크기를 최적화할 수 있습니다.from functools import lru_cache
@lru_cache(maxsize=1)
def get_cars():
print('pulling cars data')
return pd.read_csv("https://waylonwalker.com/cars.csv", storage_options = {'User-Agent': 'Mozilla/5.0'})
내 예는 규칙을 약간 늘립니다.
위의 예는 웹 요청을 수행합니다. 데이터 엔지니어로서 저는 종종 짧은 시간 동안 실행된 후 중지되는 스크립트를 작성합니다. 나는 이 작업이 실행되는 동안 이 함수의 출력이 변경될 것으로 예상하지 않으며 만약 변경되었다면 어쨌든 실제로 일치하기를 원할 수 있습니다.
web request do change their output
웹앱을 구축하거나 오랫동안 실행되는 일종의 프로세스라면. 작업을 시작하고 기다리는 것, 이것은 lru_cache의 좋은 적용이 아닐 수 있습니다. 이 프로세스가 며칠 또는 몇 달 동안 실행되는 경우 요청이 변경되지 않는다는 내 가정은 더 이상 유효하지 않습니다.
lru_cache에 대해 유형이 지정된 kwarg도 있습니다.
이것은 나에게 새로운 것이지만 값뿐만 아니라 함수에 전달되는 값의 유형을 캐시할 수 있습니다.
(from the docstring)
If typed is True, arguments of different types will be cached separately.
For example, f(3.0) and f(3) will be treated as distinct calls with distinct
results.
Reference
이 문제에 관하여(lru_cache로 파이썬 함수 캐시하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/waylonwalker/cache-a-python-function-with-lrucache-1ci7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)