파이썬은 concurrent.futures 모듈을 통해 멀티스레딩과 멀티프로세싱 작업을 수행할 수 있습니다. 이를 통해 병렬로 작업을 처리하며, CPU 자원을 효율적으로 사용할 수 있습니다.
concurrent.futures 모듈 소개
concurrent.futures 모듈은 파이썬 3.2 버전부터 추가된 내장 모듈로, 멀티스레딩과 멀티프로세싱을 쉽게 구현할 수 있게 해줍니다. 이 모듈은 ThreadPoolExecutor와 ProcessPoolExecutor라는 두 가지 클래스를 제공합니다.
- 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 자원을 효율적으로 사용할 수 있으며, 작업의 처리 속도를 향상시킬 수 있습니다.