기본 콘텐츠로 건너뛰기

라벨이 multiprocessing인 게시물 표시

Propagate -X to child processes

`multiprocessing` 자식 프로세스에서만 -X 옵션이 사라진다면: PR #146005가 정리한 “인터프리터 플래그 전달” meta_description: CPython PR #146005는 subprocess/multiprocessing이 자식 파이썬 프로세스를 띄울 때 -X 옵션을 누락 없이 전달하도록 수정한다. dev/tracemalloc/importtime 등 런타임 디버그 옵션이 부모에서는 켜졌는데 자식에서만 꺼지는 문제를 줄인다. 운영/디버깅 관점에서 어떤 증상이 사라지는지, 어떤 -X 옵션이 특히 중요하며, 호환성/주의점은 무엇인지 정리한다. meta_keywords: python, multiprocessing, subprocess, -X, xoptions, dev mode, tracemalloc, importtime, faulthandler, debugging, child process, CI, production, practical meta_robots: index,follow 운영 디버깅에서 제일 짜증나는 버그 유형이 있다. 부모 프로세스에서는 디버그 옵션이 켜져 있는데 자식 프로세스(특히 multiprocessing 으로 띄운)에서는 꺼져 있다 그래서 로그가 갈라지고, 재현이 흐려진다. -X tracemalloc 은 켰는데, 자식에서 스냅샷이 없다 -X importtime 켰는데, 자식 프로세스의 import 시간은 안 찍힌다 -X dev 켰는데, 자식에서만 경고가 안 뜬다 PR #146005(gh-146004)는 이 ‘갈라짐’을 줄이는 방향으로 subprocess 쪽 플래그 전달을 정리한다. 핵심은 간단하다. 부모 인터프리터에 설정된 -X 옵션(xoptions)을, 자식 파이썬 프로세스 실행 인자에 일관되게 전달한다. 1) PR #146005가 바꾼 것: “일부만 전달” → “전부 전달(정렬해서)” diff의 핵심은 Lib/subprocess.py ...

Python에서 멀티프로세싱을 사용하는 실전 예제

개요 Python에서 멀티프로세싱을 활용하면 CPU 바운드 작업의 처리 속도를 획기적으로 향상시킬 수 있습니다. 단일 코어만 사용하는 싱글 스레드 방식과 달리, 멀티프로세싱은 여러 코어를 활용하여 병렬 처리를 가능하게 하므로, 특히 CPU 사용률이 높은 작업에 효과적입니다. 이 포스트에서는 실제 코드 예제를 통해 Python의 multiprocessing 모듈을 사용하는 방법과 주의사항을 알아보겠습니다. 핵심 개념 정리 Python의 multiprocessing 모듈은 프로세스 생성 및 관리를 위한 다양한 기능을 제공합니다. 핵심 클래스는 Process 이며, 이를 이용해 새로운 프로세스를 생성하고, target 인자로 실행할 함수를 지정합니다. args 와 kwargs 인자를 통해 함수에 인자를 전달할 수 있습니다. Pool 클래스는 여러 프로세스를 효율적으로 관리하는 데 유용하며, map , apply_async 등의 메서드를 통해 병렬 처리 작업을 수행할 수 있습니다. 실전 코드 예제 다음은 CPU 바운드 작업인 소수 판별을 멀티프로세싱으로 구현한 예제입니다. is_prime 함수가 소수 판별 로직을 담고 있으며, multiprocessing.Pool 을 사용하여 여러 프로세스에서 병렬적으로 실행합니다. import multiprocessing import time def is_prime(n): if n <= 1: return False for i in range(2, int(n**0.5) + 1): if n % i == 0: return False return True if __name__ == '__main__': numbers = list(range(100000)) # 판별할 숫자 리스트 start_time = time.time() # 싱글 스레드 방식 si...