본문 바로가기
python

line_profiler : 어디에서 많은 시간이 걸리는지 알아보기 with flask

by _avocado_ 2023. 7. 3.

flask로 챗봇 엔진 서버를 만들면서 속도를 개선해야 하는 상황이었다. AI를 사용하는 엔진에서 다양한 방식의 속도 개선 방법이 있었지만 가장 먼저 어떤 코드에서 시간이 많이 걸리는 지 알아내는 것이 중요하였다. 그래서 선택한 방법이 line_profiler 를 사용하여 각 코드 라인별 소요시간(비율)을 확인하였다. line_profiler는 동작한 코드 각 라인별 hits 수(몇번이나 실행 되었는지), total 걸린 시간 및 hit 당 소요시간, 그리고 전체에서 해당 라인이 차지하는 시간 비율을 알 수 있다.


설치방법

pip install line_profiler

또는

conda install -c conda-forge line_profiler

사용법

line_profiler의 사용법은 간단하다. 시간 측정을 원하는 함수위에 데코레이터 형식으로 @profile을 입력하고 코드를 실행시킨 후(실행시키는 명령어가 따로 있다.) 결과를 확인하면 된다.

@profile 설정

실행 명령어

kernprof -l -v test.py

kernprof를 이용하여 스크립트를 실행하면 결과를 얻을 수 있다.

-l 옵션을 통해 라인별 프로파일링을 할 수 있고 -v 옵션으로 터미널에서 결과를 확인 할 수 있다.(없다면 파일로 저장된다.)

flask 처럼 서버를 올리는 경우 해당 API를 호출해주고 서버를 종료하면 결과를 확인 할 수 있다.(여러번 호출해도 된다)

 

결과 예시

Hits : 코드가 동작한 횟수

Time : 전체 소요 시간

Per Hit : 한번의 hit당 평균 소요시간

%Time : 전체 코드에서 해당 라인이 차지하는 시간 비율

댓글