자식 프로세스를 관리하기 위해서 subprocess 사용

매일 공부(ML)·2022년 7월 21일
0

이어드림

목록 보기
104/146

동시성

  • 컴퓨터가 같은 시간에 여러 다른 작업을 처리하는 것처럼 보이게 하는 것

    • CPU 코어가 하나일지라도 여러 프로그램이 번갈아가면서 실행되면 동시에 수행하는 것 같은 착각을 부른다.
  • 어떤 특정 유형의 문제를 해결하기 위한 도구

  • 여러 다양한 실행 경로나 다양한 I/O 흐름을 제공하여 문제를 해결하는 과정이 동시에 독립적 시행으로 보임


병렬성

  • 같은 시간에 여러 다른 작업을 실제로 처리

    • CPU 코어가 여러 개인 컴퓨터에 여러 프로그램을 동시에 실행

자식 프로세스를 관리하기 위해서 subprocess를 사용하라

"""
파이썬은 하위 프로세스를 실행하는 방법이 많으므로
자식 프로세스를 관리해야하는데 이때 subprocess 모듈 사용
"""

import subprocess

result = subprocess.run(['echo', '자식 프로세스가 보내는 인사!'],
                        capture_output = True,
                        encoding='utf-8')

result.check_returncode() #예외가 발생하지 않으면 문제없이 잘 종료

print(result.stdout)


"""
파이썬에서 subprocess 등의 모듈을 통해 실행한 자식 프로세스는
부모 프로세스인 파이썬 인터프리터와 독립적으로 실행

run함수 대신 Popen클래스를 사용해 하위 프로세세스 만들면
주기적으로 상태 검사 가능
"""

proc = subprocess.Popen(['sleep', '1'])
while proc.poll() is None:
    print('작업 중...')
    #시간이 걸리는 작업을 여기서 수행

print('종료 상태', proc.poll())

"""
자식 프로세스와 부모를 분리하면 부모 프로세스가 원하는 개수만큼 많은
자식 프로세스 병렬 실행

시간의 단축화
"""

import time

start = time.time()
sleep_procs = []
for _ in range(10):
    proc = subprocess.Popen(['sleep', '1'])
    sleep_procs.append(proc)

for proc in sleep_procs:
    proc.communicate()
    end = time.time()
    delta = end - start
    print(f'{delta:.3} 초 만에 끝남')

#만약 순차적으로 시행되며 1 * 10인 10초 이상이다.
profile
성장을 도울 아카이빙 블로그

0개의 댓글