패스트캠퍼스 한 번에 끝내는 파이썬 웹 개발 초격차 패키지 pt2 - multiprocessing

multiprocessing 실습

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()
    p.join()
    cp = mp.current_process()
    print(f"[main] pid: {cp.pid}")
    print("[main] end")


이전에서 배운 것과 마찬가지로 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")   

※ is_alive() 프로세스가 살아있는지 검사해주주는 메서드로 boolean 값을 출력한다.
※ terminate() 프로세스를 강제 종료한다.

if __name__ =="__main__":
    print("[main] start")
    p = Subprocess(name ="startcoding") 
    p.start()
    time.sleep(1)
    #프로세스가 살아있는지 검사하고 True 값일 경우 강제 종료 해버린다.
    if p.is_alive:
        p.terminate()

    print("[main] end")   


서브 프로세스가 실행되기 전에 종료된 모습이다.

좋은 웹페이지 즐겨찾기