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

2022-08-24 21:12:09 字數 1391 閱讀 3305

is_set 用來檢視乙個事件的狀態

wait 是依據事件的狀態來決定自己是否在wait處阻塞

from multiprocessing import event

#乙個訊號可以使得所有的程序都進入阻塞狀態

#也可以控制所有的程序解除阻塞

#乙個事件被建立之後, 預設是阻塞狀態

e = event() #建立了乙個事件

print(e.is_set()) #檢視乙個事件的狀態,預設被設定成阻塞

print(12345)

e.set() #將這個事件的狀態改為true,即不阻塞

e.wait() #依據e.is_set()的值來決定是否阻塞

print(12345)

e.clear() #將這個事件的狀態改為false

print(e.is_set())

e.set()

e.wait() #有條件的等待,等待這個事件的訊號變成true

print('*'* 10)

print(e.is_set())

e.clear() #將這個事件的狀態改為false,但是並沒有wait()將其阻塞,故下面的**還是可以列印

print('*'* 10)

from multiprocessing import event, process

import time

import random

def light(e):

while true:

if e.is_set():

e.clear()

print('\033[31m紅燈亮了\033[0m')

else:

e.set()

print('\033[32m綠燈亮了\033[0m')

time.sleep(2)

def cars(e,i):

if not e.is_set(): #表示'紅燈亮了:':

print('car%i在等待'%i)

e.wait() #'等紅燈'阻塞直到得到乙個事件狀態變為true的訊號

#'車通行'

print('\033[0;32;40mcar%i通過\033[0m'%i)

if __name__ == '__main__':

e = event()

traffic = process(target=light,args=(e,))

traffic.start()

for i in range(20):

car = process(target=cars, args=(e,i))

car.start()

time.sleep((random.random()))

Events 事件 紅綠燈

event 用於執行緒之間狀態的同步。對全域性變數不斷地做修改。event threading.event 生成1個event的物件 event.wait 等著設定全域性變數。檢測標誌位是否有設定,如果標誌位沒有設定的話,會一直卡在這裡。等待標誌位被設定。如果標誌位被設定了,代表綠燈,直接通行。wa...

Python 實現紅綠燈

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

紅綠燈難題

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