flask로 챗봇 엔진 서버를 만들면서 속도를 개선해야 하는 상황이었다. AI를 사용하는 엔진에서 다양한 방식의 속도 개선 방법이 있었지만 가장 먼저 어떤 코드에서 시간이 많이 걸리는 지 알아내는 것이 중요하였다. 그래서 선택한 방법이 line_profiler 를 사용하여 각 코드 라인별 소요시간(비율)을 확인하였다. line_profiler는 동작한 코드 각 라인별 hits 수(몇번이나 실행 되었는지), total 걸린 시간 및 hit 당 소요시간, 그리고 전체에서 해당 라인이 차지하는 시간 비율을 알 수 있다.
설치방법
pip install line_profiler
또는
conda install -c conda-forge line_profiler
사용법
line_profiler의 사용법은 간단하다. 시간 측정을 원하는 함수위에 데코레이터 형식으로 @profile을 입력하고 코드를 실행시킨 후(실행시키는 명령어가 따로 있다.) 결과를 확인하면 된다.
실행 명령어
kernprof -l -v test.py
kernprof를 이용하여 스크립트를 실행하면 결과를 얻을 수 있다.
-l 옵션을 통해 라인별 프로파일링을 할 수 있고 -v 옵션으로 터미널에서 결과를 확인 할 수 있다.(없다면 파일로 저장된다.)
flask 처럼 서버를 올리는 경우 해당 API를 호출해주고 서버를 종료하면 결과를 확인 할 수 있다.(여러번 호출해도 된다)
결과 예시
Hits : 코드가 동작한 횟수
Time : 전체 소요 시간
Per Hit : 한번의 hit당 평균 소요시간
%Time : 전체 코드에서 해당 라인이 차지하는 시간 비율
'python' 카테고리의 다른 글
Artillery : 서버 성능 테스트(부하 테스트) (0) | 2023.07.10 |
---|---|
Pylint : 규칙적인 코드 작성하기 (0) | 2023.06.28 |
[python 그래프] 그래프 설정 (0) | 2020.09.07 |
[python 그래프] 데이터 분석 그래프 종류 (1) | 2020.09.02 |
댓글