为什么 Event 对象不能再次等待?

Why Event object can not been wait again?

from threading import Thread, Event
import time

def countdown(n, start_evt):
    start_evt.wait()
    print('start counting')
    while n > 0:
        print('T-minus', n)
        n -= 1
        time.sleep(1)
        if n == 96:
            start_evt.clear()

start_evt = Event()
print('launching counting')

t = Thread(target=countdown, args=(100, start_evt))
t.start()
time.sleep(5)
start_evt.set()
print('countdown is running')

我是 python 线程的新手,使用 python cookbook.I 在 while.But 中设置 start_evt.clear()n==96 此线程没有再等一下,为什么?这在页面 500.It 继续倒计时,就像爆炸一样。

launching counting
countdown is running
start counting
T-minus 100
T-minus 99
T-minus 98
T-minus 97
T-minus 96
T-minus 95
T-minus 94
T-minus 93
T-minus 92

您的循环无法等待事件,因为等待语句循环之外。

我会这样做:

def countdown(n, start_evt):
    print('start counting')
    while n > 0:
        start_evt.wait()
        print('T-minus', n)
        n -= 1
        time.sleep(1)
        if n == 96:
            start_evt.clear()

现在,因为 wait() 调用在 内部 循环中,它循环直到事件被清除,然后停止