五 併發程式設計 執行緒事件

2022-07-13 17:27:10 字數 2351 閱讀 6996

事件物件管理乙個內部標誌,通過set()方法將其設定為true,並使用clear()方法將其設定為false。wait()方法阻塞,直到標誌為true。該標誌初始為false。

方法:is_set()

當且僅當內部標誌為true時返回true。

set()

將內部標誌設定為true。所有等待它成為true的執行緒都被喚醒。當標誌保持在true的狀態時,執行緒呼叫wait()是不會阻塞的。

clear()

將內部標誌重置為false。隨後,呼叫wait()的執行緒將阻塞,直到另乙個執行緒呼叫set()將內部標誌重新設定為true。

wait(timeout=none)

阻塞直到內部標誌為真。如果內部標誌在wait()方法呼叫時為true,則立即返回。否則,則阻塞,直到另乙個執行緒呼叫set()將標誌設定為true,或發生超時。

該方法總是返回true,除非設定了timeout並發生超時。

from  threading import

thread,event

import

time

defdb(e):

e.wait()

#預設是false

if e.is_set()==true:

print("

連線成功了哈哈哈")

defweb(e):

print("

資料網路開始正常")

time.sleep(1)

e.set()

##執行set則為開啟狀態 true

e=event()

p=thread(target=web,args=(e,))

p1=thread(target=db,args=(e,))

p.start()

p1.start()

#資料網路開始正常

#連線成功了哈哈哈##

程序已結束,退出** 0

import

threading,time

event = threading.event() #

'''事件預設是關閉狀態,執行set則為開啟狀態''

defa():

print("

我是第乙個執行緒函式a,我在等待函式b來觸發我...")

event.wait()

#預設是fale 開啟後就是true

print("

函式a說:尼瑪!我被函式b給觸發了...")

defb():

print("

我是第二個執行緒函式b,我開始去觸發函式a...")

time.sleep(1)

event.set()

##執行set則為開啟狀態 true

p = threading.thread(target=a)

c = threading.thread(target=b)

p.start()

c.start()##

我是第乙個執行緒函式a,我在等待函式b來觸發我...

#我是第二個執行緒函式b,我開始去觸發函式a...

#函式a說:尼瑪!我被函式b給觸發了...

用事件連線資料

from threading import

thread,event

import

time

defdb(e):

count=0

while count<3:

e.wait()

#預設是false

if e.is_set()==true:

print("

連線成功了哈哈哈")

break

else

: count+=1

print("

你資料庫連線%s失敗

"%count)

else

:

raise timeouterror("

連線超時!!!!!!!!!!!!")

defweb(e):

print("

資料網路開始正常")

time.sleep(1)

e.set()

##執行set則為開啟狀態 true

e=event()

p=thread(target=web,args=(e,))

p1=thread(target=db,args=(e,))

p.start()

p1.start()

#資料網路開始正常

#連線成功了哈哈哈##

程序已結束,退出** 0

Python之併發程式設計(五)多執行緒

多執行緒的概念介紹 threading模組介紹 threading模組和multiprocessing模式在使用層面,有甚大的相似性 開啟多執行緒的兩種方式 開啟程序的第一種方式 1.建立執行緒的開銷比建立程序的開銷小,因而建立執行緒的速度快 from multiprocessing import ...

python併發程式設計 事件

通過乙個訊號 來控制 多個程序 同時 執行或者阻塞 事件 from multiprocessing import event 乙個訊號可以使所有的程序都進入阻塞狀態 也可以控制所有的程序解除阻塞 乙個事件被建立之後,預設是阻塞狀態 e event 建立了乙個事件 print e.is set 檢視乙...

併發程式設計(五) CAS

在atomic包中,大多數類都是借助unsafe類來實現的,如以下 public static atomicinteger count new atomicinteger 0 private static void add incrementandget 方法的實現如下 public final i...