五.併發編程 (線程事件)

一. 線程事件(Event)

1. 線程事件方法等

事件對象管理一個內部標誌,經過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
相關文章
相關標籤/搜索