콘텐츠로 건너뛰기
Home » 멀티프로세스

멀티프로세스

concurrent.futures를 이용한 병렬처리 방법

리스트와 같은 일련의 데이터를 하나의 함수로 반복 처리해야 할 때, 이를 여러 프로세스에서 분산하여 동시에 처리하게 하면 전체적인 작업 시간을 단축시킬 수 있다. 서브 프로세스를 사용하는 방법으로는 multiprocessing.Process 를 사용하는 방법이 있지만, 프로세스별로 분산하여 처리한 데이터를 다시 수집하여 취합하는 과정이 좀 번거롭다. 또한 데이터 매우 많을 때 너무 많은 프로세스가 생기지 않도록 프로세스 풀을 관리하는 로직을 직접 구현해야하는 점이 번거롭기도 하다. concurrent.futures는 이러한 분산처리에 특화된 작업을 쉽게 구현할 수 있도록 도와주는 라이브러리로 사용방법이 쉽고, asyncio와 비슷한 Future라는 개념을 사용하고 있다.… 더 보기 »concurrent.futures를 이용한 병렬처리 방법

파이썬의 새로운 병렬처리 API – Concurrent.futures

컴퓨터 프로그램이 어떤 일을 처리해 나가는 실행 흐름은 기본적으로 선형이다. 서브루틴을 실행하는 것은 실질적으로 현재의 실행흐름이 해당 루틴의 단계까지 내려갔다가 다시 복귀하는 것이며, 하나의 CPU는 마치 고속도로에서 차선을 바꿔타듯 코드를 진행하며 작업을 처리해나간다. 하지만 두 개의 차선에서 동시에 다른 작업이 진행되어야 하는 상황이 언젠가는 필요할 수 있을 것이다.

이전에는 이것을 ‘동시성’이라 불렀고, 파이썬에서는 기본적으로 threading.ThreadMultiprocessing.Process 를 이용해서 다중 스레드 및 다중 프로세스를 통해서 동시성 작업을 처리했다. 이들 라이브러리 이전에 _thread 라는 저수준 API가 존재했었지만, 지금은 잊어도 좋을 것 같다.

파이썬 3.2에서는 ‘동시성’에 관한 개념을 발전시킨 고수준 API를 제공하여 더 나은 형태의 코드를 작성할 수 있게끔해주는데, 그것이 바로 오늘 소개할 concurrent.futures 라이브러리이다.

이 새로운 API는 기존의 멀티스레드 관련 API를 완전히 대체하지는 않는다. concurrent 모듈은 여전히 내부적으로 _thread와 같은 기존 API에 의존하고 있는 것도 사실이며, 스레드나 프로세스를 저수준에서 세세하게 제어하는 수단을 모두 제공하지도 않는다.

다만 주목할 것은 자바스크립트의 Promise 개념과 비슷한 Future라는 개념을 도입했고, 결과적으로 분산처리 및 그외 동시성에 관련된 코드를 좀 더 편하게 작성할 수 있게 해준다.

더 보기 »파이썬의 새로운 병렬처리 API – Concurrent.futures