멀티프로세서 3

ProcessPoolExecutor의 코드 및 동작원리

1. 전반적인 동작 방식1.1. 초기화초기화 시, 다음과 같은 중요한 속성들이 설정됩니다:max_workers: 사용할 최대 워커 프로세스 수를 결정. 기본값은 CPU 코어 수를 기반으로 설정.mp_context: 멀티프로세싱 컨텍스트(spawn, fork 등) 설정. 플랫폼 및 옵션에 따라 안전한 방식을 사용.max_tasks_per_child: 각 워커가 처리할 최대 작업 수 설정. 초과 시 프로세스는 종료되고 새로운 프로세스가 생성됨.1.2. 작업 제출 (submit)사용자로부터 작업이 제출되면 다음 과정이 진행됩니다:Future 객체 생성: 작업의 결과를 비동기적으로 관리하기 위한 객체.작업 항목 생성 및 저장: _WorkItem으로 작업 정의 후 대기 목록(_pending_work_items)에..

멀티스레드(ThreadPoolExecutor), 멀티프로세서(ProcessPoolExecutor) 비교

배경다층구조 json 데이터를 3가지 테이블로, 분리하는 작업이 오래걸림(25초)일반실행, 멀티스레드, 멀티프로세서 각각 방식에서 어떤 방식이 빠른지 관찰하려 한다.일반 실행시간병렬 처리 없이 단일 스레드에서 모든 데이터 처리를 수행하니, 25초가 걸렸다.멀티스레드 실행 시간 분석스레드 수총 소요 시간총 함수 호출 수wait 호출 수acquire 호출 수as_completed 호출 누적 시간113.69 초3,79621513.54 초215.50 초5,207102815.35 초515.23 초7,494106715.07 초1016.33 초11,3342013216.18 초2016.11 초19,0003925815.72 초주요 관찰 사항스레드 수 1일 때 최단 시간(13.69초)이 소요되었습니다.스레드 수 증가에 따..

(ProcessPoolExecutor 사용 오류) A process in the process pool was terminated abruptly while the future was running or pending

배경멀티스레드 대신 멀티프로세서(ProcessPoolExecutor) 방식을 사용하려 했다.그런데 아래 오류가 뜨면서 동작하지 않았다.BrokenProcessPool: A process in the process pool was terminated abruptly while the future was running or pending.해결과정어떻게 해도 ProcessPoolExecutor가 동작하지 않았다.오랜시간 검색끝에, 대화형 환경(주피터)에서 실행한 것이 문제라는 문서를 발견했다.공식문서 내용 요약ProcessPoolExecutor는 각 프로세스를 독립적으로 실행하므로, 프로세스가 시작될 때마다 메인 코드(즉, main 모듈)를 다시 불러와야 합니다. 이 main 모듈은 프로세스가 작업을 제대로 ..