본문 바로가기

Python/Advanced

[Python] Thread(2) - DeamonThread

"""
DaemonThread(데몬스레드)
(1).백그라운드에서 실행
(2).메인스레드 종료시 즉시 종료 - 데몬스레드의 특징
(3).주로 백그라운드 무한 대기 시 이벤트 발생시 실행하는 부분 담당 -> JVM(가비지 콜렉터), 자동저장
(4).일반 스레드는 작업 종료시 까지 실행

"""
import logging
import threading
import time

# 스레드 실행 함수
def thread_func(name, d):
    logging.info("Sub-Thread %s: starting", name)

    for i in d:
        print("***Sub-Thread {}: {}".format(name, i))
        # pass

    logging.info("Sub-Thread %s: finishing", name)

# 메인 영역
if __name__ == "__main__":
    # Logging format 설정
    format = "%(asctime)s: %(message)s"
    logging.basicConfig(format=format, level=logging.INFO, datefmt="%H:%M:%S")
    logging.info("Main-Thread : before creating thread")
    
    # 함수 인자 확인
    # Deamon : Default False
    x = threading.Thread(target=thread_func, args=('First', range(20000)), daemon=True)
    # x.daemon = True

    y = threading.Thread(target=thread_func, args=('Second', range(10000)), daemon=True)
    
    logging.info("Main-Thread : before running thread")
    
    # 서브 스레드 시작
    x.start()
    y.start()

    # DaemonThread 확인
    print(x.isDaemon())
   
    logging.info("Main-Thread : wait for the thread to finish")
    
    # 주석 전후 결과 확인
    # x.join() 
    # y.join()
    
    logging.info("Main-Thread : all done")