반응형
Recent Posts
Recent Comments
관리 메뉴

개발잡부

[python] API 응답시간 확인 본문

Python

[python] API 응답시간 확인

닉의네임 2023. 5. 4. 11:27
반응형

회사에서 일을 하다보면 가끔 능지가 박살난 사람을 만나게 된다. 

어드민에  관리할수 있는기능이 있는데도 손가락이 공주님이라 그마저도 하기 싫어서 자동으로 만들어 달라고 하는 ..

선량한 개발자들이 우리회사 같은곳을 잘 걸러야 할텐데..

 

검색시에 속성필터정보를 따로 호출 하는데 이 속성필터를 검색결과에 없으면 제거해달라는 능지 박살난 소리를 처리해보자

 쿼리에서 집계를 해야하고 그 집계로 속성필터에서 유효한 값만 리턴해줘야 하니.. 

성능에 이슈가 있어보인다. 루프는 최소한으로 .. 처리해서  실행시간을 측정

 

검색 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