크롤러와 멀티스레드
스레드는 한 개의 프로세스가 분주히 움직일 수 있게 해준다.
예를 들어
위 세 사이트를 크롤링한다고 생각해보자.
프로그램은 아래 순서에 따라 수행될 것이다.
크롤러는 순차적으로 실행되어, 네이버 페이지를 전부 다운로드할 때까지 다른 작업을 하지 못한다.
멀티스레드를 사용하면 네이버 페이지를 다운로드 받는동안, daum이나 nate 페이지 다운로드 요청을 수행할 수도 있고, 이미 다운로드가 완료된 페이지를 처리할 수도 있다.
즉 스레드를 이용하면 효율적으로 크롤러를 동작하게 할 수 있다.
멀티스레드를 적용한 크롤러와 적용하지 않은 크롤러의 성능을 비교해보자
일반 크롤러
크롤링 대상은 나무위키 정수, 수, 한국 아이돌, 걸그룹 분류 항목 페이지에서 각각 20개의 위키문서 링크, 총 80개이다.
먼저 페이지 하나씩 순서대로 긁는 정직한(?) 크롤러를 만들어보자.
80개 페이지를 긁는데 99초가 소요되었다.
이번에는 멀티스레드 크롤러를 만들어보자.
크롤러에 멀티스레드 끼얹기
99초에서 21초로 처리 속도가 약 5배 정도 빨라졌다.
눈에 띄는 성능 향상이지만 아직은 부족하다
크롤러에 멀티스레드, 멀티프로세스 끼얹기
멀티스레드에서 21초 걸리던 작업을 6초로 줄일 수 있었다.