본문 바로가기
개발일지/Python

22.03.03 [파이썬 웹개발] 멀티스레드, 멀티프로세싱

by 개발에정착하고싶다 2022. 3. 3.
320x100

전체적으로 점점 뭔지는 알겠는데 따라쓰기에 바쁘고, 해석은 가능하나

이것을 응용한다? 그게 진짜 안나온다.

 

그만큼 잘 모른다.라고 스스로 인지한다.

그렇다면 이런걸 응용하려면 어떻게 해야할까? 를 고민하게 된다.

 

chapter1

 

import threading

# 스레드에서 실행할 함수

def work():
    print("[sub] start")
    keyword = input("[sub] 검색어를 입력하세요>>>")
    print(f"[sub] {keyword}로 검색을 시작합니다.")
    print("[sub] end")

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

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

print("[main] 메인 스레드는 자기할일을 합니다.")
print("[main] end")
 
chapter2
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("[메인] 장이 종료되었습니다.")
 

chapter 3

 

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__": # 메인 모듈일 경우에만 여기 (if 영역)에 해당되는 것을 실행해라.
    print("[main] start")
    p = mp.Process(target=sub_process, args=("startcoding",))
    p.start()
    cp = mp.current_process()
    print(f"[main] pid : {cp.pid}")
    print("[main] end")


# if __name__ == "__main__"을 윈도우에서만 사용하는 이유
 

16.6. multiprocessing — Process-based “threading” interface — Python 2.7.18 documentation

A process pool object which controls a pool of worker processes to which jobs can be submitted. It supports asynchronous results with timeouts and callbacks and has a parallel map implementation. processes is the number of worker processes to use. If proce

docs.python.org

 

 

 

chapter4

 

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(3) # 3초간 쉬어가는 것
        print(f"[sub] {self.name} end")



if __name__ == "__main__":
    print("[main] start")
    p = Subprocess(name="startcoding")
    p.start()
    time.sleep(1)
   
    # 프로세스가 살아있는지 검사
    # print(p.is_alive()) # 메서드는 끝에 ()를 붙여주는 거라고 한다.
    if p.is_alive:
        p.terminate()

 

    print("[main]end")

 

# 추가학습
# 1. 스레드간 데이터 처리 (lock)
# 2. 프로세스간 데이터 전송 (Queue, Pipe)
# 3. 속도 비교
# 4. 운영체제와 메모리

 

300x250