Python MultiProcessing
2024. 3. 16. 20:32ㆍpython
Python의 multiprocessing
모듈은 병렬 처리를 위한 도구를 제공합니다. 이 모듈을 사용하면 여러 개의 프로세스를 동시에 실행하여 작업을 병렬로 처리할 수 있습니다. 이는 멀티코어 CPU 시스템에서 작업을 분산하여 수행함으로써 성능을 향상시키는 데 사용됩니다.
multiprocessing
모듈을 사용하여 병렬 처리를 수행하는 데는 몇 가지 주요 개념이 있습니다.
프로세스 (Process):
multiprocessing.Process
클래스를 사용하여 새로운 프로세스를 생성할 수 있습니다.- 각 프로세스는 독립적인 메모리 공간을 가지며, 각각의 프로세스는 별도의 Python 인터프리터 인스턴스를 실행합니다.
- 각 프로세스는 운영체제에 의해 관리되며, CPU 시간을 할당 받아 실행됩니다.
풀 (Pool):
multiprocessing.Pool
클래스를 사용하여 여러 작업을 병렬로 실행할 수 있습니다.- 풀은 워커 프로세스 풀을 관리하고, 작업을 분산하여 처리합니다.
- 풀을 사용하면 작업의 실행, 완료 및 결과 수집이 간단해집니다.
프로세스 간 통신 (Inter-Process Communication, IPC):
- 프로세스 간 통신을 위해
multiprocessing.Queue
,multiprocessing.Pipe
등의 도구를 사용할 수 있습니다. - 이를 통해 프로세스 간 데이터를 전달하고 통신할 수 있습니다.
- 프로세스 간 통신을 위해
동기화 (Synchronization):
- 여러 프로세스가 공유된 자원에 안전하게 접근하기 위해 동기화가 필요합니다.
multiprocessing.Lock
,multiprocessing.Semaphore
,multiprocessing.Event
등의 도구를 사용하여 프로세스 간 동기화를 수행할 수 있습니다.
multiprocessing
모듈은 일반적으로 CPU 바운드 작업을 병렬로 처리하는 데 사용됩니다. 이를 통해 CPU의 다중 코어를 활용하여 작업을 가속화할 수 있습니다. 그러나 주의해야 할 점은 병렬 처리가 CPU를 많이 사용하므로, I/O 바운드 작업의 경우에는 병렬 처리의 효과를 기대하기 어렵다는 것입니다.
import multiprocessing
from functools import partial
class ParallelProcessor:
def __init__(self, num_processes=None):
if num_processes is None:
self.num_processes = multiprocessing.cpu_count()
else:
self.num_processes = num_processes
def process_task(self, task_function, data_list):
with multiprocessing.Pool(processes=self.num_processes) as pool:
results = pool.starmap(task_function, data_list)
return results
# 예시 작업 함수
def print_add_three_numbers(text, a, b, c):
print(text)
return a, b, c
# 사용 예시
if __name__ == "__main__":
data = [("First set:", 1, 2, 3), ("Second set:", 4, 5, 6), ("Third set:", 7, 8, 9)] # 작업할 데이터 리스트
processor = ParallelProcessor(num_processes=4) # 병렬 처리 객체 생성
# 데이터를 병렬로 출력하고 반환하기
results = processor.process_task(partial(print_add_three_numbers), data)
print("Results:", results)
'python' 카테고리의 다른 글
FLASK - S3 연동 (1) | 2024.02.08 |
---|---|
python 원형 그래프 / 제일 많은 Ratio 강조 (1) | 2024.01.24 |
원그래프 그리기 / 가장 많은 부분 강조 (0) | 2024.01.24 |
Flask & React 연결 (w/ s3) (0) | 2024.01.23 |
SQLite python - table 속성 추가 (0) | 2024.01.19 |