为什么事件对象不能再次等待


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 线程的新手。我把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()调用位于循环,因此它会循环,直到事件被清除,然后停止

最新更新