반응형
메인 프로그램이 종료될 때, 스레드도 함께 종료하기 위한 방법을 이해합니다.
목차
개발 의도
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("메인 프로그램 종료")
# 출력값: 스레드 시작 / 메인 프로그램 종료
- 이 방법을 통해 메인 프로그램의 종료와 함께 스레드를 종료할 수 있습니다.
- 데몬 스레드를 활용하여 효율적으로 자원을 관리할 수 있습니다.
반응형
'개발 > 오늘의 개발일지' 카테고리의 다른 글
[Python] 한줄로 print 문을 출력하기 위한 캐리지 리턴 이해하기 (0) | 2024.11.17 |
---|---|
[Python] 스레드 종료를 기다리기 위한 join 이해하기 (0) | 2024.11.16 |
[Python] 하나의 변수에 여러 스레드가 접근하는 것을 막기 위한 Lock 이해하기 (2) | 2024.11.14 |
[Python] 바이트 문자열과 바이트 배열의 차이 이해하기 (0) | 2024.11.13 |
[Python] 반복문과 Lambda: 값 캡처와 변수 참조의 차이 이해하기 (3) | 2024.11.12 |