동시성
컴퓨터가 같은 시간에 여러 다른 작업을 처리하는 것처럼 보이게 하는 것
어떤 특정 유형의 문제를 해결하기 위한 도구
여러 다양한 실행 경로나 다양한 I/O 흐름을 제공하여 문제를 해결하는 과정이 동시에 독립적 시행으로 보임
병렬성
같은 시간에 여러 다른 작업을 실제로 처리
"""
파이썬은 하위 프로세스를 실행하는 방법이 많으므로
자식 프로세스를 관리해야하는데 이때 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초 이상이다.