티스토리 뷰
[Python] subprocess를 사용한 병렬 프로그래밍 - (1)
목표
- 한 task의 프로세스를 복수로 실행해야하는 상황에서 병렬로 실행하여 실행시간을 단축해보자.
설정
- subprocess를 사용해 병렬로 프로세스를 처리하는 원리를
익히기 위해 아주 간단한 프로세스를 구현
- argument로 숫자를 받아 n번째 프로세스인지 표시하고
5초 대기 후, hello n subprocess를 출력하는 프로세스 구현
목표 프로세스
- 적당한 파일에 이 코드를 작성해주세요.
'''target_process.py'''import sysimport timeif __name__ == "__main__":print('{} process...'.) # n번째 프로세스인지 표시# 5초간 대기print('Hello {} subprocess'.) # 목표메시지 출력
이것을 순차적으로 100번 반복실행한다고 생각했을때,
5 × 100 = 500s = 8분 20초 가 소요된다.
subprocess모듈을 사용해, 병렬로 실행해보자!
- 위의 목표 프로세스와는 별개의 파일에 이 코드를 작성해주세요.
'''hello_subprocess.py'''import timeimport subprocess''' 서브프로세스 생성 후 return'''proc =return procstart = # 실행시간 체크processes = # 실행할 프로세스 담아놓기for i in :proc =# process객체의 communicate메소드로 실행for proc in processes:end = #실행시간 체크print("Finished in %.3f seconds" % (end-start))
- 제가 실행했을때는 6.503초가 걸립니다.
암달의 법칙에 따르면, 프로세스 숫자가 점점 늘어날 수록, print함수의 영향을 받아 실행시간이 점차 길어질텐데요. 그럼에도 불구하고 원래 예상했던 8분 20초보다는 훨~~~~~~~~씬 빠르게 완료할 수 있겠습니다.
요약
- 실행 프로세스 분리
- 병렬실행할 프로세스를 일제히 담아놓고 (subprocess.Popen을 활용)
- process.communicate() 로 비동기 실행을 통해 일제히 실행!
- 학습하면서, 달리기할때, 일렬로 줄세울때까지 기다렸다가 모두 서면 일제히 출발해서 모두 들어올때까지 기다렸다 행사를 마무리하는 과정이 생각났습니다.
'Programming > python' 카테고리의 다른 글
PYTHON 인코딩 dictionary (1) | 2017.06.12 |
---|
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 중니어개발자
- 혼공JS
- 머신러닝시스템설계
- 개밸자
- openai
- 우분투
- OS
- 설치
- 오너프로그래머
- Gym
- 마이크로서비스아키텍처
- Python
- 육각형개발자
- 크롤링
- 개발자로서지향할점
- MLOps
- 파이썬
- it창업
- 한빛미디어
- 나는리뷰어다
- 혼공학습단
- 시니어개발자
- 나는리뷰어다2023
- 머신러닝앱
- install
- ubuntu
- Crawling
- 혼공
- 혼공분석
- 혼공분석파이썬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함