MST

星途 面试题库

面试题:Python中线程优雅退出之基础实现

请用Python代码示例展示如何使用`Event`对象来实现线程的优雅退出,并简要解释其原理。
28.0万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
import threading
import time


def worker(event):
    while not event.is_set():
        print("Worker is working...")
        time.sleep(1)
    print("Worker received exit signal, exiting...")


if __name__ == "__main__":
    exit_event = threading.Event()
    thread = threading.Thread(target=worker, args=(exit_event,))
    thread.start()

    # 主线程执行一些其他任务
    time.sleep(5)

    # 发出退出信号
    exit_event.set()

    # 等待线程结束
    thread.join()
    print("Main thread exits.")

原理解释

  1. Event对象threading.Event是一个简单的线程同步对象,它内部有一个标志位。
  2. 工作线程:在worker函数中,使用while not event.is_set()循环来持续检查Event对象的状态。只要Event对象的标志位未设置(is_set()返回False),线程就会继续执行任务。当标志位被设置(is_set()返回True),线程就会收到退出信号并结束循环,执行后续的清理工作然后退出。
  3. 主线程:主线程在启动工作线程后,执行一些其他任务。在合适的时机,通过调用exit_event.set()设置Event对象的标志位,向工作线程发送退出信号。最后,主线程调用thread.join()等待工作线程结束,确保程序能够优雅退出。