事件對象管理一個內部標誌,經過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
def db(e):
e.wait() # 默認是false
if e.is_set()==True:
print("鏈接成功了哈哈哈")
def web(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則爲開啓狀態''
def a():
print("我是第一個線程函數a,我在等待函數b來觸發我...")
event.wait() # 默認是Fale 開啓後就是True
print("函數a說:尼瑪!我被函數b給觸發了...")
def b():
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
def db(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("鏈接超時!!!!!!!!!!!!")
def web(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