[파이썬] 파이썬 내장 모듈인 concurrent.futures 사용

파이썬은 concurrent.futures 모듈을 통해 멀티스레딩과 멀티프로세싱 작업을 수행할 수 있습니다. 이를 통해 병렬로 작업을 처리하며, CPU 자원을 효율적으로 사용할 수 있습니다.

concurrent.futures 모듈 소개

concurrent.futures 모듈은 파이썬 3.2 버전부터 추가된 내장 모듈로, 멀티스레딩과 멀티프로세싱을 쉽게 구현할 수 있게 해줍니다. 이 모듈은 ThreadPoolExecutor와 ProcessPoolExecutor라는 두 가지 클래스를 제공합니다.

두 클래스는 Executor 인터페이스를 구현하고 있으며, 각각 submit() 메서드를 통해 작업을 제출할 수 있습니다. 제출된 작업은 백그라운드에서 실행되며, Future 객체를 반환합니다. 이 객체를 통해 작업의 상태를 확인하고 결과를 가져올 수 있습니다.

concurrent.futures 사용 예시

다음은 concurrent.futures를 사용하여 거듭제곱을 계산하는 예시 코드입니다.

import concurrent.futures

def power_of_two(x):
    return x ** 2

# ThreadPoolExecutor를 사용하여 작업 실행
with concurrent.futures.ThreadPoolExecutor() as executor:
    # 작업 제출 및 결과 가져오기
    future = executor.submit(power_of_two, 2)
    result = future.result()
    
    print(result)  # Output: 4

# ProcessPoolExecutor를 사용하여 작업 실행
with concurrent.futures.ProcessPoolExecutor() as executor:
    # 작업 제출 및 결과 가져오기
    future = executor.submit(power_of_two, 2)
    result = future.result()
    
    print(result)  # Output: 4

위 예시에서는 power_of_two 함수를 정의하여 제출할 작업으로 사용했습니다. submit() 메서드를 통해 작업을 제출하고, result() 메서드를 호출하여 작업의 결과를 가져옵니다.

먼저 ThreadPoolExecutor를 사용하여 작업을 실행했습니다. 이는 스레드 기반의 병렬 작업을 수행합니다. 그리고 ProcessPoolExecutor를 사용하여 작업을 실행했습니다. 이는 프로세스 기반의 병렬 작업을 수행합니다.

결론

concurrent.futures 모듈은 파이썬에서 멀티스레딩과 멀티프로세싱 작업을 쉽게 구현할 수 있는 간편한 방법을 제공합니다. 이를 통해 병렬 작업을 수행함으로써 CPU 자원을 효율적으로 사용할 수 있으며, 작업의 처리 속도를 향상시킬 수 있습니다.