在 Python 中使用 threading.Thread 时,可以设置 daemon 属性来指定线程是否为守护线程(daemon thread)。这个属性的值可以是 True 或 False,每种情况下会有不同的影响:
1. daemon=True:
• 当一个线程被设置为守护线程时,Python解释器在程序的所有非守护线程都终止后会立即退出,不会等待守护线程完成它们的任务。
• 守护线程适用于后台运行的任务,例如日志记录、监控等,这些任务在主程序结束时可以不必完成。
2. daemon=False(默认值):
• 非守护线程是默认线程类型。Python解释器会等待所有非守护线程都完成后才会退出。
• 如果一个非守护线程没有结束,程序将不会退出,解释器会一直等待该线程完成。
import threading
import time
def background_task():
while True:
print("Background task running...")
time.sleep(1)
# 创建一个守护线程
daemon_thread = threading.Thread(target=background_task, daemon=True)
daemon_thread.start()
# 创建一个非守护线程
non_daemon_thread = threading.Thread(target=background_task, daemon=False)
non_daemon_thread.start()
# 主线程睡眠5秒,然后退出
time.sleep(5)
print("Main thread exiting...")
在这个例子中:
• daemon_thread 是一个守护线程,主线程在 5 秒后退出时,守护线程也会立即终止。
• non_daemon_thread 是一个非守护线程,即使主线程在 5 秒后退出,解释器也会等待该线程完成(这在实际中可能导致程序无法退出,因为 background_task 是一个无限循环)。
通过设置 daemon 属性,你可以控制线程的生命周期,从而根据需要决定它们是否需要在主程序退出时继续运行或立即终止。