라인 프로파일러를 설치하는 방법은 간단하다.
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 을 쓰지않고 파싱하는 방법을 적용했다.
그건 다음 글에 연달아 적겠다.
댓글