국비지원교육으로 수강하고 있는 파이썬/장고 4주차 강의 정리 내용입니다.
1) 멀티 스레딩(multi-threading)
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)
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로 시작하는 웹 프로그래밍