Thread / Process

JoyJuhee·2022년 11월 8일
0

Python

목록 보기
19/22
post-thumbnail

국비지원교육으로 수강하고 있는 파이썬/장고 4주차 강의 정리 내용입니다.

멀티 스레딩과 멀티 프로세싱

1) 멀티 스레딩(multi-threading)

  • 동시성(Concurrency) 프로그래밍
  • 동시에 실행되는 것처럼 보이는 것
  • 스레드 여러 개를 번갈아가면서 실행
import threading

# 스레드에서 실행할 함수
def work():
    print("[sub] start")
    keyword = input("[sub] 검색어를 입력하세요.")
    print(f"[sub] {keyword}로 검색을 시작합니다..")
    print("[sub] end")

# 메인스레드 실행되는 부분
print("[main] start")

worker = threading.Thread(target=work)
# worker.daemon = True # 메인스레드가 종료될때 서브스레드가 같이 종료된다. 
worker.start()

print("[main] 메인 스레드는 자기 할 일을 합니다.")
print("[main] end")

<결과>


import threading
import time 

# 주식 자동매매
# 매수, 매도

# 매수 스레드
def buyer():
    for i in range(5):
        print("[매수] 데이터 요청 중")
        time.sleep(1)
        print("[매수] 데이터 분석 중")
        time.sleep(1)
        print("[매수] 지금이 매수 타이밍인가...?!?!")
        time.sleep(1)
        print("[매수] 매수 진행!!")
        time.sleep(1)


# 매도 스레드
def saler():
    for i in range(5):
        print("[매도] 데이터 요청 중")
        time.sleep(1)
        print("[매도] 데이터 분석 중")
        time.sleep(1)
        print("[매도] 손절 or 익절?")
        time.sleep(1)
        print("[매도] 눈물을 머금고 손절합니다.")
        time.sleep(1)

# 메인 스레드
print("[메인] start")
buyer = threading.Thread(target=buyer)
saler = threading.Thread(target=saler)
buyer.start()
saler.start()

buyer.join() # 매수 스레드가 종료될 때까지 메인 스레드가 기다린다.
saler.join() # 매도 스레드가 종료될 때까지 메인 스레드가 기다린다.
print("[메인] 장이 종료되었습니다.")

<결과>

2) 멀티 프로세싱(multi-processing)

  • 병렬성(Parallelism) 프로그래밍
  • 실제로 작업이 동시에 실행되는 것
  • 프로세스를 여러 개 만들어서 동시에 실행
import multiprocessing as mp

# 프로세스에서 실행할 함수
def sub_process(name):
    print("[sub] start")
    print(name)
    print("[sub] end")


# 메인 프로세스
if __name__ == "__main__":
    print("[main] start")
    p = mp.Process(target=sub_process, args=('startcoding',))
    p.start()
    print("[main] end")

<결과>


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')
    

<결과>


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')

<결과>


출처 : 패스트캠퍼스 Python & Django로 시작하는 웹 프로그래밍

0개의 댓글