플라스크를 이용한 웹 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 정도로 획기적인 속도 단축을 얻을 수 있었습니다.
'Back > Python' 카테고리의 다른 글
[Python][flask] 개인 https 서버 구성 (0) | 2021.07.06 |
---|---|
[Python] OpenCV (0) | 2021.01.05 |
[Python] Flask를 이용한 Tflite Imageclassfier REST API 구성 (0) | 2020.11.02 |
[Python][Anaconda3] Anaconda 설치(1) (0) | 2020.10.27 |
[Python] Flask 살펴보기 (0) | 2020.10.21 |