Events 事件 紅綠燈

2022-02-20 17:42:10 字數 1956 閱讀 4020

event: 用於執行緒之間狀態的同步。對全域性變數不斷地做修改。 

event=threading.event()  #生成1個event的物件

event.wait() #等著設定全域性變數。檢測標誌位是否有設定,如果標誌位沒有設定的話,會一直卡在這裡。等待標誌位被設定。

如果標誌位被設定了,代表綠燈,直接通行。wait不阻塞。

如果標誌位被清空,代表紅燈,wait等待。

多個執行緒可以等待同乙個event的標誌位的變化。

event.set() #設定乙個標誌位,相當於全域性變數

event.clear() #清空標誌位

event.is_set() #判斷是否設定了標誌位

理解點:

1.車的執行緒與紅綠燈的執行緒之間有了關聯,車的執行緒會根據紅綠燈的執行緒而變化。

2.每一次狀態的切換,就是一次事件的發生,會相應地做不同的事情。

import time,threading

event=threading.event()

def lighter():

count=0

event.set() #先設為綠燈

while true:

if count>5 and count<10: #改成紅燈

event.clear() #清空標誌位,在紅燈狀態卡10s

print('\033[41;1mred light is on..\033[0m')

elif count>10:

event.set()#變綠燈

count=0

else:

print('\033[42;1mgreen light is on..\033[0m')

time.sleep(1)

count+=1

def car(name):

while true:

if event.is_set(): #設定了標誌位,代表綠燈

print('[%s] running...'%name)

time.sleep(1)

else:

print('[%s] red light,waiting..'%name)

event.wait()

print('[%s] green is on, start going.'%name )

light=threading.thread(target=lighter,)

light.start()

car1=threading.thread(target=car,args=('tesla',))

car1.start()

執行結果:

green light is on..

[tesla] running...

green light is on..

[tesla] running...

green light is on..

[tesla] running...

[tesla] running...

green light is on..

[tesla] running...

green light is on..

[tesla] running...

green light is on..

[tesla] running...

red light is on..

red light is on..

[tesla] red light,waiting..

red light is on..

red light is on..

green light is on..

[tesla] green is on, start going.

[tesla] running...

green light is on..

[tesla] running...

紅綠燈難題

contest 多校訓練 985專場 problem f 985的紅綠燈難題 time limit 1 sec memory limit 128 mb submit 206 solved 127 submitstatusweb board description 已知紅 綠 黃燈各持續r g y秒,...

Python 實現紅綠燈

一 通過event來實現兩個或多個執行緒間的互動,下面是乙個紅綠燈的例子,即起動乙個執行緒做交通指揮訊號燈,乙個執行緒做車輛,車輛行駛按紅燈停,綠燈行的規則。usr bin python coding utf 8 這是我用來練習python執行緒鎖的測試指令碼 import threading,ti...

Python併發程式設計 事件,紅綠燈控制

is set 用來檢視乙個事件的狀態 wait 是依據事件的狀態來決定自己是否在wait處阻塞 from multiprocessing import event 乙個訊號可以使得所有的程序都進入阻塞狀態 也可以控制所有的程序解除阻塞 乙個事件被建立之後,預設是阻塞狀態 e event 建立了乙個事...