World Nomade Flask 스터디1 ) python heap sort, quick sort , merge...
## 문제
Q. 다음 요구사항을 만족하는 RESTful API 를 파이썬과 Flask를 이용해서 만드세요.
정수를 포함하는 배열을 입력으로 받아서, 최대값을 리턴합니다.
요청 메시지와 응답 메시지는 모두 JSON 포맷입니다.
[요청 메시지 샘플]
{
"numbers": [3,8,2,3,9,5,4]
}
[응답 메시지 샘플]
{
"result": 9
}
해당 문제에 대해서 Flask를 이용해서 해결하도록 하겠습니다.
먼저 필요한 라이브러리로는
Flask==0.12.2
flask-json
requests
nose
requests와 nose 라이브러리는 테스트를 위하여 설치합니다.
간단한 프로젝트이기 때문에 hello.py 하나의 파이썬 파일로 구성하고, 알고리즘 부분은 core.py ,
테스트 부분은 tests/test.py 로 구성하였습니다.
import time
from flask import Flask
from core import maxheap_element, check_value_type, merge_sort, maxheap_element2
from flask import request
from flask_json import FlaskJSON, JsonError, json_response
app = Flask(__name__)
json = FlaskJSON( app )
@app.route('/heapsort',methods=['GET','POST'])
def index():
start_time = time.time() # json으로 요청이 오기 때문에 request.get_json메서드를 이용하여 data를 받은 후 # data는 json type이기 때문에 원하는 input인 data['numbers']를 얻습니다. # try - except 구문으로 input이 json이 아닌경우 json의 key가 numbers가 아닌 경우 JSONERROR를 발생시켜 예외 처리를 # 해줍니다.
data = request.get_json(force=True)
try:
value = data['numbers']
except (KeyError, TypeError, ValueError):
raise JsonError(description='Invalid value.')
check_value_type(value) #value가 int element를 가진 list인지 체크
result = maxheap_element(value) # heap_sort를 이용해서 처리
execution_time=time.time() - start_time # 실행시간 체크
sort = 'heap sort'
return json_response(result=result,time=execution_time,sort=sort)
if __name__ == '__main__' :
app.run( debug = True )
저는 여러가지 알고리즘을 적용해서 길이가 1만인 리스트를 요청으로 보내서
걸리는 시간을 체크해봤습니다.
테스트는 JUPYTER NOTEBOOK에서 Requests 라이브러리를 이용해서 테스트 하였습니다.
속도는 heapsort > quick sort > merge sort 순이었습니다.
from http://blog.doosikbae.com/47 by ccl(A) rewrite - 2020-03-07 05:20:43
댓글
댓글 쓰기