Python 멀티프로세스 멀티스레드로 크롤러 성능 올리기

Key Kim
4 min readJan 5, 2020

--

python 크롤러를 개발하면서, 멀티스레드와 멀티프로세스를 동시에 사용해 성능 개선을 해본 과정을 정리해봤다.

크롤러는 보통 데이터를 네트워크로부터 다운로드하는 부분에서 병목이 발생해 성능이 많이 떨어진다. 이를 멀티스레드와 멀티프로세스를 활용해 성능을 향상시켜보자.

크롤러와 멀티스레드

스레드는 한 개의 프로세스가 분주히 움직일 수 있게 해준다.

예를 들어

www.naver.com

www.daum.net

www.nate.com

위 세 사이트를 크롤링한다고 생각해보자.

프로그램은 아래 순서에 따라 수행될 것이다.

크롤러는 순차적으로 실행되어, 네이버 페이지를 전부 다운로드할 때까지 다른 작업을 하지 못한다.

멀티스레드를 사용하면 네이버 페이지를 다운로드 받는동안, daum이나 nate 페이지 다운로드 요청을 수행할 수도 있고, 이미 다운로드가 완료된 페이지를 처리할 수도 있다.

즉 스레드를 이용하면 효율적으로 크롤러를 동작하게 할 수 있다.

멀티스레드를 적용한 크롤러와 적용하지 않은 크롤러의 성능을 비교해보자

일반 크롤러

크롤링 대상은 나무위키 정수, 수, 한국 아이돌, 걸그룹 분류 항목 페이지에서 각각 20개의 위키문서 링크, 총 80개이다.

먼저 페이지 하나씩 순서대로 긁는 정직한(?) 크롤러를 만들어보자.

정직한(?) 크롤러의 성능

80개 페이지를 긁는데 99초가 소요되었다.

이번에는 멀티스레드 크롤러를 만들어보자.

크롤러에 멀티스레드 끼얹기

99초에서 21초로 처리 속도가 약 5배 정도 빨라졌다.

눈에 띄는 성능 향상이지만 아직은 부족하다

크롤러에 멀티스레드, 멀티프로세스 끼얹기

멀티스레드에서 21초 걸리던 작업을 6초로 줄일 수 있었다.

--

--

Responses (1)