파이썬 멀티 프로세스 공유 메모리 설정 ( Manager )
2023. 4. 7. 07:59ㆍit
반응형
0. Python Multi-processing Manager 란
Manager 객체는 multiprocessing 모듈에서 제공하는 메모리 공유 기능을 사용하기 위한 클래스입니다. Manager 객체는 프로세스 간에 데이터를 공유하기 위한 Proxy 객체를 생성하고, 이 객체를 통해 프로세스 간의 데이터를 동기화합니다. Manager 객체는 다음과 같은 자료구조를 생성할 수 있습니다.
- 공유 리스트 (list)
- 공유 딕셔너리 (dict)
- 공유 세트 (set)
- 공유 카운터 (Value)
- 공유 배열 (Array)
- 공유 네임드 튜플 (Namespace)
- 공유 큐 (Queue)
위 자료구조들은 Manager 객체를 사용하여 생성되므로, 프로세스 간에 공유될 수 있습니다. 이를 통해 멀티프로세싱 환경에서도 안전하게 데이터를 공유할 수 있습니다.
Manager 객체는 내부적으로 multiprocessing 모듈에서 제공하는 IPC(Inter-Process Communication) 기법을 사용하여 프로세스 간에 데이터를 공유합니다. 이를 통해 프로세스 간의 동기화와 데이터 일관성을 유지할 수 있습니다. 다만, Manager 객체를 사용하면 프로세스 간의 데이터 교환에 대한 부하가 있기 때문에, 단일 프로세스에서 실행하는 것보다 성능이 좀 떨어질 수 있습니다.
2. 기본 문법
반응형
import multiprocessing
if __name__ == '__main__':
# Manager 객체를 생성합니다.
manager = multiprocessing.Manager()
# 공유 리스트를 생성합니다.
shared_list = manager.list()
# 공유 딕셔너리를 생성합니다.
shared_dict = manager.dict()
# 공유 큐를 생성합니다.
shared_queue = manager.Queue()
3. Manager 예제
728x90
import multiprocessing
def worker(shared_list, process_index):
for i in range(5):
shared_list.append(f"Process {process_index}: {i}")
if __name__ == '__main__':
# Manager 객체를 생성합니다.
manager = multiprocessing.Manager()
# 공유 리스트를 생성합니다.
shared_list = manager.list()
# 프로세스를 생성하고 실행합니다.
processes = []
for i in range(3):
p = multiprocessing.Process(target=worker, args=(shared_list, i))
processes.append(p)
p.start()
# 모든 프로세스가 종료될 때까지 대기합니다.
for p in processes:
p.join()
# 결과를 출력합니다.
print(f"Final result: {shared_list}")
4. 결과
Final result: ['Process 0: 0', 'Process 0: 1', 'Process 0: 2', 'Process 0: 3', 'Process 0: 4', 'Process 1: 0', 'Process 1: 1', 'Process 1: 2', 'Process 1: 3', 'Process 1: 4', 'Process 2: 0', 'Process 2: 1', 'Process 2: 2', 'Process 2: 3', 'Process 2: 4']
반응형
'it' 카테고리의 다른 글
우분투에서 Vim 유용한 기본 설정 (0) | 2023.04.14 |
---|---|
주요 언어별 unix(정수타입 시간) timestamp 변환( 자바스크립트, 자바, 파이썬, c++ ) (0) | 2023.04.11 |
파이썬 멀티 쓰레드 예제 정리 ( Join, Lock, Queue ) (0) | 2023.04.06 |
Configuring In-Memory Engine in MySQL (0) | 2023.04.03 |
mysql 모니터링( slow 쿼리 찾기 ) (0) | 2023.03.30 |