守护线程

发布时间 2023-07-28 23:41:54作者: Allen_Hao
'''
在Python中,使用threading.Thread类创建守护线程可以通过设置daemon参数为True来实现。
守护线程是一种特殊的线程,它会随着主线程的结束而自动退出(守护线程会随着主线程的结束而自动退出。因此,如果主线程先结束,守护线程也会立即退出,无论守护线程是否执行完成。),无需手动调用join()方法等待守护线程执行完成。


最佳实践:
    1. 在创建threading.Thread对象之前将daemon参数设置为True,确保线程启动之前就被标记为守护线程。
    2. 当所有非守护线程都结束时,Python解释器会检查是否还有活动的守护线程。如果只剩下守护线程,Python解释器会直接退出程序,不会等待守护线程执行完成。
    3. 尽量避免在守护线程中进行耗时的操作或阻塞式的I/O操作,因为守护线程会在主线程结束时立即退出,可能导致未完成的操作被中断(资源未释放)。
    4. 如果守护线程需要与其他线程进行通信或共享数据,应该使用适当的线程同步机制,如锁(Lock)、条件变量(Condition)等。
'''

import threading
import time


def task():
    while True:
        print("Daemon thread is running")
        time.sleep(1)


def main():
    # 方式1:  创建线程时指定为守护进程
    daemon_thread = threading.Thread(target=task, daemon=True)
    # 方式2: 创建线程后,通过线程的daemon属性为True设置为守护线程
    # daemon_thread = threading.Thread(target=task)
    # daemon_thread.daemon = True  # 设置守护线程

    daemon_thread.start()

    time.sleep(5)  # 主线程等待5秒

    print("Main thread finished")

输出:

Daemon thread is running
Daemon thread is running
Daemon thread is running
Daemon thread is running
Daemon thread is running
Main thread finished