안녕하세요? 뜻밖의 행운입니다.
오늘로 패스트 캠퍼스 도전 49일
내일이 마지막이네요 강의는 무진장 많이 남았지만
도전은 도전대로 끝내고 저는 끝까지 쭈욱 강의 잘 듣겠습니다.
계속해서 동시성과 병렬성
파이썬 멀티프로세싱 오늘 배운 내용 정리해보도록 하겠습니다.
오늘도 따로 이론은 없었고 실습만 있었습니다.
아래 3가지 실습으로 멀티 프로세스 모듈이 어떻게 동작하는지 알아봤습니다.
import multiprocessing as mp
# 프로세스에서 실행할 함수
def sub_process(name):
print("[sub] start")
print(name)
cp = mp.current_process()
print(f"[sub] pid : {cp.pid}")
print("[sub] end")
# 메인 프로세스
if __name__ == "__main__":
print("[main] start")
p = mp.Process(target=sub_process, args=('startcoding',))
p.start()
cp = mp.current_process()
print(f"[main] pid : {cp.pid}")
print("[main] end")
사용방법 자체는 간단합니다.
또 멀티프레세싱 모듈을 임포트 하고
그냥 호출해서 사용하면 됩니다.
다만 이것을 어떻게 잘 사용할지가 늘 문제지요
이중에서 왜? 이렇게 써야 하지 이해가 안되는 부분인데
if __name__ == "__main__" 사용하는 이유
https://docs.python.org/2/library/multiprocessing.html#multiprocessing-programming
내용이 너무 길어서 위 사이트의 내용을 참고하여 공부하라고 하는데
천천히 한번 봐야겠네요
출력값
[main] start
[main] pid : 33052
[main] end
[sub] start
startcoding
[sub] pid : 18464
[sub] end
pid의 경우는 실행할때마다 계속 해서 변경될 수 있는 부분입니다.
메인이 먼저 실행되고
끝난 뒤에 서브가 실행되고 끝나는것이 보입니다.
사실 전 시간에 이것을 방지하기 위해서 join을 썼던 기억이 나는데
아니나 다를까 바로 다음 실습에서 해당 내용에 대해 다루더라구요
from multiprocessing import Process
import time
class Subprocess(Process):
def __init__(self, name):
Process.__init__(self)
self.name = name
def run(self):
print(f"[sub] {self.name} start")
time.sleep(5)
print(f"[sub] {self.name} end")
if __name__ == "__main__":
print("[main] start")
p = Subprocess(name='startcoding')
p.start()
p.join()
print("[main] end")
실행시키면 아래와 같은 결과가 떨어집니다.
[main] start
[sub] startcoding start
[sub] startcoding end
[main] end
이번에는 join을 사용해서 main이 먼저 끝나지 않고 sub 가 끝날때까지 기다렸다가
함께 잘 끝나는 것이 보입니다.
from multiprocessing import Process
import time
class Subprocess(Process):
def __init__(self, name):
Process.__init__(self)
self.name = name
def run(self):
print(f"[sub] {self.name} start")
time.sleep(5)
print(f"[sub] {self.name} end")
if __name__ == "__main__":
print("[main] start")
p = Subprocess(name='startcoding')
p.start()
time.sleep(1)
# 프로세스가 살아있는지 검사
if p.is_alive:
p.terminate()
print("[main] end")
[main] start
[sub] startcoding start
[main] end
여기서는
if p.is_alive:
p.terminate()
'IT > 프로그래밍' 카테고리의 다른 글
패스트캠퍼스 챌린지 최종 미션, 한 번에 끝내는 파이썬 웹개발 초격차 패키지 Online. 강의 후기 (0) | 2022.03.22 |
---|---|
[파이썬] 일급객체 [패스트 캠퍼스 챌린지 50일] (0) | 2022.03.14 |
[파이썬] threading 모듈 사용법 [패스트 캠퍼스 챌린지 48일] (0) | 2022.03.12 |
[파이썬] 동시성과 병렬성[패스트 캠퍼스 챌린지 47일] (0) | 2022.03.11 |
[파이썬] re 모듈 정규표현식 실습 문제 [패스트 캠퍼스 챌린지 46일] (0) | 2022.03.10 |
[파이썬] re 모듈 사용방법 [패스트 캠퍼스 챌린지 45일] (0) | 2022.03.09 |
[파이썬] re 모듈 사용방법 [패스트 캠퍼스 챌린지 44일] (0) | 2022.03.08 |
[파이썬] 정규표현식 추가 [패스트 캠퍼스 챌린지 43일] (0) | 2022.03.07 |
[파이썬] 정규표현식 [패스트 캠퍼스 챌린지 42일] (0) | 2022.03.06 |
[파이썬] 파이썬에서 SQLite3 사용하기 [패스트 캠퍼스 챌린지 41일] (0) | 2022.03.05 |