본문 바로가기
python/python 성능개선

[python] 라인마다 걸리는 시간을 체크해주는 line_profiler

by 달죽 2020. 11. 11.
반응형

라인 프로파일러를 설치하는 방법은 간단하다. 

 

pip install line_profiler

 

 

하지만 나는 위 방법으로 자꾸 안깔려서

 

Anaconda navigator 에서 직접 파일을 검색해서 깔았더니 됬다. (windows)

 

실행하는 방법은

 

 

실행할 함수에다가 @profile을 입력해준다.

함수안에 있는 코드를 한줄씩 시간을 체크해주는거기 때문에 함수 위에다가 넣으면 된다.

별도의 import 는 필요하지 않다. 

@데코레이션을 하고 밑의 명령어를 쳐준다.

 

kernprof -l -v test.py

 

실행이 되면 test.py.Iprof 파일이 워킹디렉토리에 깔아지는데 이것은 그냥 메모장으로는 못연다.

 

파일은 이 명령어로 변환해야한다.

 

python -m line_profiler sales.py.lprof > results.txt

 

 

 

 

위의 컬럼명을 보면

 

HITS 는 반복 횟수이고

TIme 은 전체시간,

per HIT는 한번 돌아갈때 걸리는 시간이다. 

%TIME 은 이 함수에서 이 라인이 차지하는 시간이다.

 

 html.parser  시간이  느렸군

selenium 에서 html.parser 할때 아주 미친듯이 오래 걸리는것을 확인할수 있었다.  

 

 

 

 

홈페이지 가보니 겁나 느리다고 나와있었음. 근데 이걸 lxml 로 바꿔도 똑같다 

 

 

 

 

 

Lxml 느림

 


 그래서 Soupstrainer 모듈을 쓰면 모든 부분을 parser 하지 않고 해당 태그부분만 parser한다고 나와있었다.

결과는? 

 

Soupstrainer 느리다.

 

 

 

 

 

 

둘이 비교..

soup.find_all 부분 시간이 줄어든것을 볼수가 있다.

 

하지만 여기서 끝낼 수 없었다.

이 코드는 끝나면 4시간이 걸리는 코드... (병렬처리를 해도... 저 parser 부분이 문제여서 고치고 싶었다.)

 

결국에는 고쳤다. 어떻게?

beautifulsoup 을 쓰지않고 파싱하는 방법을 적용했다.  

 

그건 다음 글에 연달아 적겠다.

반응형

댓글