일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- aggregation
- API
- token filter test
- 차트
- Java
- TensorFlow
- docker
- License
- Test
- license delete
- matplotlib
- springboot
- plugin
- Mac
- query
- zip 파일 암호화
- 900gle
- flask
- 파이썬
- licence delete curl
- ELASTIC
- Python
- zip 암호화
- high level client
- aggs
- analyzer test
- Elasticsearch
- Kafka
- sort
- MySQL
Archives
- Today
- Total
개발잡부
[python] API 응답시간 확인 본문
반응형
회사에서 일을 하다보면 가끔 능지가 박살난 사람을 만나게 된다.
어드민에 관리할수 있는기능이 있는데도 손가락이 공주님이라 그마저도 하기 싫어서 자동으로 만들어 달라고 하는 ..
선량한 개발자들이 우리회사 같은곳을 잘 걸러야 할텐데..
검색시에 속성필터정보를 따로 호출 하는데 이 속성필터를 검색결과에 없으면 제거해달라는 능지 박살난 소리를 처리해보자
쿼리에서 집계를 해야하고 그 집계로 속성필터에서 유효한 값만 리턴해줘야 하니..
성능에 이슈가 있어보인다. 루프는 최소한으로 .. 처리해서 실행시간을 측정
검색 API 와 중계(mashup) API 를 같이 호출해보고 실행시간을 기록한다.
결과는 아래와 같이
# -*- coding: utf-8 -*-
import time
import json
import requests
import ssl
import urllib3
from ssl import create_default_context
import matplotlib.pyplot as plt
from matplotlib.collections import EventCollection
import numpy as np
from time import sleep
plt.rcParams['font.family'] = 'AppleGothic'
print(ssl.OPENSSL_VERSION)
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def csv_data():
count= 1;
progress=0;
api_data = []
jg_data = []
print("Start.")
with open(CSV_FILE) as data_file:
for line in data_file:
line = line.strip()
time.sleep(0.5)
url_jg= "https://url.co.kr/totalsearch/total/search/initSearch.json?inputKeyword="+line+"&page=1&perPage=20&searchKeyword="+line+"&searchType=NONE&sort=RANK"
search_start = time.time()
response_jg = requests.get(url_jg, verify=False)
search_time = time.time() - search_start
jg_data.append(round(search_time * 1000, 2))
url_api = "https://url.co.kr/home/1.0/total/search?sort=RANK&inputKeyword="+line+"&searchKeyword="+line+"&page=1&perPage=20"
api_start = time.time()
response_api = requests.get(url_api, verify=False)
api_time = time.time() - api_start
api_data.append(round(api_time * 1000, 2))
print(line)
print("== totalsearch api 실행시간 ==")
for atimes in api_data:
print(str(atimes) + " ms.")
print("== 중계 api 실행간 ==")
for jtimes in jg_data:
print(str(jtimes) + " ms.")
# 평균 구하기
average_api= np.mean(api_data)
average_jg= np.mean(jg_data)
# print("전체쿼리 횟수: {} 회".format(len(keywords)))
print("검색 api 평균응답시간: {} ms.".format(round(average_api, 2)))
print("중계 평균응답시간: {} ms.".format(round(average_jg, 2)))
apix = range(len(api_data))
jgx = range(len(jg_data))
# plot the data
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(apix, api_data, color='tab:blue')
ax.plot(apix, jg_data, color='tab:red')
ax.set_ylabel('응답시간(ms)')
ax.set_xlabel('조회수(회)')
# create the events marking the x data points
xevents1 = EventCollection(apix, color='tab:blue', linelength=0.05)
xevents2 = EventCollection(apix, color='tab:red', linelength=0.05)
# create the events marking the y data points
yevents1 = EventCollection(api_data, color='tab:blue', linelength=0.05,
orientation='vertical')
yevents2 = EventCollection(jg_data, color='tab:red', linelength=0.05,
orientation='vertical')
# add the events to the axis
ax.add_collection(xevents1)
ax.add_collection(xevents2)
ax.add_collection(yevents1)
ax.add_collection(yevents2)
# set the limits
ax.set_xlim([1, len(apix)])
ax.set_ylim([0, 500])
ax.set_title('API[BLUE] / 중계[RED]')
# display the plot
plt.show()
##### MAIN SCRIPT #####
if __name__ == '__main__':
CSV_FILE = "./easypickup/filter/word_qa.csv"
csv_data()
print("Done.")
반응형
'Python' 카테고리의 다른 글
[python] .txt 파일 라인 카운트 (1) | 2023.05.19 |
---|---|
[python] 데이터검증 (0) | 2023.05.17 |
[python] DB data to json file (0) | 2023.04.30 |
[python] mysql 연동 - PyMySQL (0) | 2023.04.30 |
[python] kibana 에서 쓰던 쿼리 조회 하기 (0) | 2023.04.21 |
Comments