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

어떤 처리량이 많은 작업을 작은 단위로 쪼개거나, 현재 진행되는 흐름과 독립적으로 병렬적인 처리를 하기 위해서 멀티스레드나 멀티프로세스를 사용하는 경우가 (지금까지는 드물지만) 종종 있다.

이전에는 Threading.ThreadMultiprocessing.Process 를 이용해서 각각의 스레드나 별도 프로세를 제어하는 방식을 사용했다. 파이썬 3.2에서 이러한 비동기 실행을 위한 API를 보다 고수준으로 만들고 사용하기 쉽도록 개선한 concurrent.futures 모듈이 도입되었다.

concurrent.futures 모듈

https://docs.python.org/3/library/concurrent.futures.html#module-concurrent.futures

이 모듈은 멀티프로세싱 및 멀티스레딩을 위한 API를 제공한다. 이전의 스레드, 프로세스 관련  API들이 C 기반의 코드를 래핑하는 수준으로 개발되어 있어서 사용하기도 복잡하고, 스레드나 락 객체를 직접 제어해야 하던 부분들과 여러 스레드들을 다시 동기화하는 작업들이 어려웠던 점 등 여러 모로 까다로운 부분이 있었다.

concurrent.futures 모듈은 이러한 점들을 개선하면서 사용하기 쉽고 스레드와 프로세스를 사용하는 API를 통일하고, 특히 비동기 코루틴과 거의 유사한 형태의 API를 제공하여, 현대적인 자바스크립트의 비동기 Task 프로토콜인 Promise와 유사한 Future라는 클래스를 도입하여 보다 깔끔하게 병렬처리 코드를 작성할 수 있게 해준다. 파이썬의 새로운 병렬처리 API – Concurrent.futures 더보기