본문 바로가기

Back/Python

[Python][Flask] Flask에서 cache 설정

플라스크를 이용한 웹 API를 구성하였을 때, 다른 요청이 온다면 당연히 매번 입력을 받아 동작을 수행해야 하지만,

같은 입력이라면 이전에 수행했던 결과를 불러오면 됩니다. Flask와 같이 사용하는 werkzeug는 간단한 캐시 기능을 지원합니다.

werkzeug  의 캐싱 부분이 deprecte 되었습니다.

cachelib으로 이전되어 다음과 같이 사용하면 됩니다. (21/08/02)

from cachelib  import SimpleCache
cache = SimpleCache()

def get_my_item():
    rv = cache.get('my-item')
    if rv is None:
        rv = calculate_value()
        cache.set('my-item', rv, timeout=5 * 60)
    return rv

수정전 글

더보기

flask-docs-kr.readthedocs.io/ko/latest/patterns/caching.html

 

캐싱(Caching) — Flask 0.11-dev documentation

캐싱(Caching) 여러분의 어플리케이션이 느린 경우, 일종의 캐시를 넣어봐라. 그것이 속도를 높이는 최소한의 가장 쉬운 방법이다. 캐시가 무엇을 하는가? 여러분이 수행을 마치는데 꽤 시간이 걸

flask-docs-kr.readthedocs.io

 다음과 같이 캐시를 설정합니다.

from werkzeug.contrib.cache import SimpleCache
cache = SimpleCache()

#공식 문서에서 소개하는 사용예시.
def get_my_item():
    rv = cache.get('my-item')
    if rv is None:
        rv = calculate_value()
        cache.set('my-item', rv, timeout=5 * 60)
    return rv

 

.get()으로 값을 읽어오고, .set()으로 저장할 수 있습니다. set으로 timeout을 설정해 줄수 있습니다.

다만 위의 방법대로 하면 중간에 과정이 많은 경우(당연히 잘 가다듬으면 저 안에 넣을 수는 있습니다.) 사용하기 어렵습니다.

다음과 같이 두 부분으로 나누어 주었습니다.

 

def chk_my_cache(name):
            rv = cache.get(name)
            if rv is None:
                return False,(0,0,0)
            else:
                return True,rv

def set_my_cache(name,rv):
    cache.set(name, rv, timeout=5 * 60)
    
    
   
 ########



@app.route('/uploader', methods=['POST','GET'])
def upload_file():
   if request.method == 'POST':
       f = request.files['file']
       n = request.values['key']
   res = False
   res,rv =chk_my_cache(f.filename+n)
   if res:
     return rv
   
   ##########생략###############
   
   val = calculated()
   set_my_cache(f.filename+n, val)
   return val

읽는 부분과 저장하는 부분을 구분하였습니다. 또한 cache의 이름에 사용되기 위한 key를 같이 입력받아 이름으로 설정되게 하였습니다. 

 


2020/11/02 - [Python] - [Python] Flask를 이용한 Tflite Imageclassfier REST API 구성

 

[Python] Flask를 이용한 Tflite Imageclassfier REST API 구성

이전글 더보기 2020/10/21 - [Python] - [Python] Flask 살펴보기 [Python] Flask 살펴보기 Flask? Flask는 파이썬에서 사용가능한 웹프레임워크 중 하나입니다. 개발사에 따르면 '마이크로'프레임 워크이며 이 마.

hidden-loca.tistory.com

 

이전에 만든 API를 이용하여 시간을 측정해 보겠습니다.

 

첫 리퀘스트시 723ms정도 나오지만 같은 요청이 올경우 48ms 정도로 획기적인 속도 단축을 얻을 수 있었습니다.