안녕하세요? 뜻밖의 행운입니다.
패스트 캠퍼스 도전 48일차
2일만 하면 끝나네요 길면 긴시간인데 여기까지 오다니
매년 새해 이런저런 결심만 해오다가 ㅎ
진짜 하나는 끝내는게 있어서 좋네요
오늘은 파이썬 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")
threading 모듈 역시 쉬운 파이썬 답게 그냥 import로 사용하면 됩니다.
스레드가 어떻게 동작하는지 파악하기 위해
main, sub 를 각각 나눠서 지정합니다.
worker = threading.Thread(target=work)
worker.start()
스레드 사용의 핵심이겠네요 보면 인스턴스를 만들어서 사용하죠?
threading 모듈의 Thread 매서드를 이용해서 할당하는 것이 보입니다.
target=함수명으로 스레드를 사용합니다.
그리고 만든 인스턴스 뒤에 .start() 로 실행 시키면
아래와 같은 결과가 나오면서 실행이 됩니다.
[main] start
[sub] start
[main] 메인 스레드는 자기할일을 합니다..
[main] end
[sub] 검색어를 입력하세요 >>>1
[sub] 1로 검색을 시작합니다...
[sub] end
다만 main 스레드가 먼저 종료되어 버렸는데
main이 종료 될 때 sub도 종료되게 하려면 주석 처리된 .daemon = true를 풀어서 사용하면 됩니다.
이번에는 멀티 스레드에 대해서 좀 보면
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("[매도] 손절할까? 익절할까?...")
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("[메인] 장이 종료되었습니다.")
위 프로그램을 돌려보면 아래와 같은 형식의 결과가 나옵니다.
[메인] start
[매수] 데이터 요청 중...
[매도] 데이터 요청 중...
[매수] 데이터 분석 중...
[매도] 데이터 분석 중...
[매도] 손절할까? 익절할까?...
[매수] 오!! 지금이 매수 타이밍인가!!...
[매도] 눈물을 머금고 손절합니다...
[매수] 풀매수 가즈아!!...
[매도] 데이터 요청 중...
[매수] 데이터 요청 중...
[매도] 데이터 분석 중...
[매수] 데이터 분석 중...
[매도] 손절할까? 익절할까?...
[매수] 오!! 지금이 매수 타이밍인가!!...
[매도] 눈물을 머금고 손절합니다...
[매수] 풀매수 가즈아!!...
[매수] 데이터 요청 중...
[매도] 데이터 요청 중...
[매수] 데이터 분석 중...
[매도] 데이터 분석 중...
[매수] 오!! 지금이 매수 타이밍인가!!...
[매도] 손절할까? 익절할까?...
[매수] 풀매수 가즈아!!...
[매도] 눈물을 머금고 손절합니다...
[매수] 데이터 요청 중...
[매도] 데이터 요청 중...
[매도] 데이터 분석 중...
[매수] 데이터 분석 중...
[매수] 오!! 지금이 매수 타이밍인가!!...
[매도] 손절할까? 익절할까?...
[매수] 풀매수 가즈아!!...
[매도] 눈물을 머금고 손절합니다...
[매도] 데이터 요청 중...
[매수] 데이터 요청 중...
[매도] 데이터 분석 중...
[매수] 데이터 분석 중...
[매도] 손절할까? 익절할까?...
[매수] 오!! 지금이 매수 타이밍인가!!...
[매도] 눈물을 머금고 손절합니다...
[매수] 풀매수 가즈아!!...
[메인] 장이 종료되었습니다.
스레드가 무조건 한 차례씩 바뀌어가면서 수행되는 것은 아닙니다.
실행 할때마다 순서는 다를 수 있습니다.
여기서 처음 실행했던것과 다른 것은
네 join 매서드 입니다. 주석에도 써있듯이 사용된 스레드가 끝날때 까지
메인 스레드가 먼저 종료되지 않고 기다렸다가 종료 되게 하는 매서드 입니다.
'IT > 프로그래밍' 카테고리의 다른 글
패스트캠퍼스 챌린지 최종 미션, 한 번에 끝내는 파이썬 웹개발 초격차 패키지 Online. 강의 후기 (0) | 2022.03.22 |
---|---|
[파이썬] 일급객체 [패스트 캠퍼스 챌린지 50일] (0) | 2022.03.14 |
[파이썬] multiprocessing 모듈 사용법 [패스트 캠퍼스 챌린지 49일] (0) | 2022.03.13 |
[파이썬] 동시성과 병렬성[패스트 캠퍼스 챌린지 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 |