본문 바로가기
개발/오늘의 개발일지

[Python] 메인 프로그램과 함께 종료되는 데몬 스레드 이해하기

by 꾀돌이 개발자 2024. 11. 15.
반응형

 

메인 프로그램이 종료될 때, 스레드도 함께 종료하기 위한 방법을 이해합니다.

 

 

 
 

목차

     

    개발 의도

    import threading
    import time
    
    def worker():
        print("스레드 시작")
        time.sleep(5)
        print("스레드 종료")
    
    # 스레드를 생성하고 데몬 설정 없이 실행
    thread = threading.Thread(target=worker)
    thread.start()
    
    print("메인 프로그램 종료")
    
    # 출력값: 스레드 시작 / 메인 프로그램 종료 / (5초 뒤) 스레드 종료

    - 위와 같이 스레드 동작이 완료되기 전에

          메인 프로그램을 종료하는 코드를 작성합니다.

     

    - 최종 출력값은 "스레드 시작 / 메인 프로그램 종료"가 되며

          "스레드 종료"는 출력되지 말아야 합니다.

     

    문제 상황

    - 코드를 실행했을 때, "메인 프로그램 종료"가 출력된 후,

          몇 초 뒤 "스레드 종료"가 출력됩니다.

     

    문제 원인 파악

    - 파이썬의 threading 라이브러리에서 스레드는

          기본적으로 메인 프로그램이 종료될 때 종료되지 않고 끝까지 실행됩니다.

     

    - 그러나 스레드를 데몬으로 설정하면,

          메인 프로그램이 종료되면 데몬 스레드도 함께 종료됩니다.

     

    데몬 스레드를 통한 문제 해결

    import threading
    import time
    
    def worker():
        print("스레드 시작")
        time.sleep(5)
        print("스레드 종료")
    
    # 스레드를 생성하고 데몬으로 설정
    thread = threading.Thread(target=worker)
    thread.daemon = True
    thread.start()
    
    print("메인 프로그램 종료")
    
    # 출력값: 스레드 시작 / 메인 프로그램 종료

    - thread.daemon = True 코드를 통해 생성된 스레드는 데몬 스레드이므로,

          메인 프로그램이 종료되면 worker 스레드도 즉시 종료됩니다.

     

    - time.sleep(5)가 끝나기 전에 스레드가 종료되며,

          "스레드 종료" 메시지가 출력되지 않습니다.

     

    데몬 스레드 특성

    - 즉 데몬 스레드는

          기존 스레드와 같이 메인 프로그램의 흐름과 관계없이 백그라운드에서 작업을 수행하며,

          기존 스레드와 달리 메인 프로그램이 종료되면 데몬 스레드도 자동으로 종료됩니다.

     

    아래 코드로 디버깅 완료

    import threading
    import time
    
    def worker():
        print("스레드 시작")
        time.sleep(5)
        print("스레드 종료")
    
    # 스레드를 생성하고 데몬으로 설정
    thread = threading.Thread(target=worker)
    thread.daemon = True
    thread.start()
    
    print("메인 프로그램 종료")
    
    # 출력값: 스레드 시작 / 메인 프로그램 종료

    - 이 방법을 통해 메인 프로그램의 종료와 함께 스레드를 종료할 수 있습니다.

     

    - 데몬 스레드를 활용하여 효율적으로 자원을 관리할 수 있습니다.

    반응형