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

정영찬·2022년 2월 11일
0
post-thumbnail

Threding

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.start()


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

print("[main] 종료")

main 과 sub 스레드가 따로 나뉘어서 작업을 실행한다.
I/O 작업을 수행할 때 이런 방식의 구현을 사용

daemon

  • main 스레드에 daemon 을 True 값으로 설정해놓으면, main 스레드가 종료됨과 동시에 sub 스레드도 종료를 하게된다.
# 메인스레드 실행되는 부분
print("[main] start")

worker = threading.Thread(target=work)
worker.daemon = True
worker.start()


검색어 입력을 받지 않고 바로 종료해버린다.

주식 자동 매매

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 seller():
    for i in range(5):
        print("[매도] 데이터 요청중...")
        time.sleep(1)
        print("[매도] 데이터 분석중...")
        time.sleep(1)
        print("[매도] 오 !! 손절 각이다 ")
        time.sleep(1)
        print("[매도] 손절  가즈아~~~")
        time.sleep(1)

# 메인 스레드

print("[메인] start")
buyer = threading.Thread(target=buyer)
seller = threading.Thread(target=seller)

buyer.start()
seller.start()

print("[메인] 장이 종료 되었습니다.")

메인 스레드에서 매수와 매도가 번갈아가며 문구를 출력하고 마지막에 장이 종료되는 방식인데, 실제로 구현해보면 메인 장이 종료되었다는 문구가 먼저 뜨고 반복이 진행되는 경우가 생긴다.

이럴때 사용하는것이 바로 join이다
메인 스레드에서 정의한 각각의 서브스레드에 join속성을 부여하면
메인 스레드는 해당 스레드 들이 종료하기 전까지 기다리게 된다.

# 메인 스레드

print("[메인] start")
buyer = threading.Thread(target=buyer)
seller = threading.Thread(target=seller)

buyer.start()
seller.start()


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

profile
개발자 꿈나무

0개의 댓글