IT일지/파이썬

[파이썬] concurrent.futures 모듈로 병렬처리하기

체험가 2024. 1. 27. 15:17
반응형

웹 크롤링을 하는데 1페이지씩 하려니 오래걸려서 비동기로 처리하는 방법을 찾다가 발견한 방법입니다.

아래는 크롤링 부분은 빼고 concurrent.futures 사용방법에 대한 예시입니다.


코드확인

 

각 라인별로 간단히 정리해보면

line 5 ~ 9 / 병렬 실행할 do_work 함수를 정의

line 12 / do_work에 입력할 값을 리스트로 저장

line 15 ~ 17 / 병렬처리 실행 및 결과 저장

line 20 ~ 21 / 결과 출력

 

다른 부분은 기본적인 내용이라 넘어가고 ThreadPoolExecutor부분만 자세히 살펴보면 다음과 같은 구조로 되어있습니다.

with concurrent.futures.ThreadPoolExecutor() as executor:
     results = executor.map(병렬 실행할 함수 명, 반복가능한( iterable ) 객체)

 

executor.map 함수의 두번째 인자인 반복가능한 객체에 담겨있는 요소를 하나씩 꺼내서

첫번째 인자의 함수에 넣어 실행하고 결과를 results에 담는 형태입니다.

 

iterable객체란 리스트나 튜플과 같이 여러 개의 값을 가지고 있는 변수라고 생각하면 편합니다.


결과확인

결과 창에 색깔로 구분해뒀는데

빨간색은 코드 실행과 동시에 출력되고

노란색은 2초 뒤에 실행되고

초록색은 concurrent.futures.ThreadPoolExecutor가 모두 끝난 다음 출력됩니다.

 

ThreadPoolExecutor로 실행하는 함수는 병렬로 처리되지만 나머지 부분은 동기로 처리된다는 것이죠.

 

함수단위로 병렬처리 되기 때문에 복잡한 작업 보다는 웹 페이지 스크랩과 같이 간단하지만 시간이 걸릴 수 있는 작업에 유용한 도구인 듯 하네요

728x90
반응형