12.1 启动与停止线程

  • Python 中的线程会在一个单独的系统级线程中执行(比如说一个POSIX 线程或者一个 Windows 线程),这些线程将由操作系统来全权管理。

  • 线程一旦启动,将独立执行直到目标函数返回。

  • 守护线程又叫后台线程,这些线程会在主线程终止时自动销毁。

    1
    t = Thread(target=countdown, args=(10,), daemon=True)
  • 你无法结束一个线程,无法给它发送信号,无法调整它的调度,也无法执行其他高级操作。

    如果需要这些特性,你需要自己添加。比如说,如果你需要终止线程,那么这个线程必须通过编程在某个特定点轮询来退出。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    import time
    from threading import Thread

    class MyThread(Thread):
    def __init__(self):
    super().__init__()
    self._running = True

    def termination(self):
    self._running = False

    def run(self):
    num = 10
    while self._running and num > 0:
    print('-------',num)
    num -= 1
    time.sleep(1)

    thread1 = MyThread()
    thread1.start()

    time.sleep(2)
    thread1.termination()
    # ------- 10
    # ------- 9
    # [Finished in 2.3s]

12.2 判断线程是否已经启动

  • Event 对象包含一个可由线程设置的信号标志,它允许线程等待某些事件的发生。
  • 在初始情况下,event 对象中的信号标志被设置为假
  • 如果将一个 event 对象的信号标志设置为真,它将唤醒所有等待这个 event 对象的线程。