標籤:height 技術分享 資料 參數 task queue 獨立 操作 忽略
一、Event
1、為什麼會有Event?
線程的一個關鍵特性就是每個線程的運行都是獨立運行且狀態不可預測。如果程式中的線程需要通過別的線程的狀態來判斷自己線程中的 某個程式是否需要執行,那麼Event就產生了。
2、Event的作用?
threading庫中Event對象主要是通過判斷自己線程中的Event對象來判斷是否喚醒所等待這個Event對象的線程,Event對象包含一個可由 線程設定的訊號標誌,預設情況下該訊號標誌為假,如果有別的線程等待這個Event對象時,當他為假時那麼這些被等待的線程將一直被阻塞 直到Event對象為真時才會繼續執行。如果這個訊號標誌為真了那麼別的線程就會忽略它而繼續執行程式。
3、Event的使用方法
event=threading.Event() #執行個體化產生一個Event的對象
event.isSet(): #返回event的狀態值;
event.wait(): #如果 event.isSet()==False將阻塞線程;
event.set(): #設定event的狀態值為True,所有阻塞池的線程啟用進入就緒狀態, 等待作業系統調度;
event.clear(): #恢複event的狀態值為False,預設情況下就是為Flase。
4、
線程1 線程2
注釋:在多個線程中,當有線程1出現Event.wait()時會判斷線程2中Event.isSet()的狀態,如果為True,線程1繼續執行程式,如 果為Flase,線程1會等待線程2中Event.set()狀態設定為True後再繼續執行程式。
線程1是否能執行完畢程式依賴於線程2的Event對象是否為真
5、執行個體:
6、event.wait()方法還支援添加一個逾時參數,預設線程會等待event.isSer()為True時才會執行下面代碼,但是設定了逾時參數後,當線程 等待超過這個時間就會自動執行下面的代碼。
二、隊列
1、什麼是隊列?
資料進行有序的處理,相當於按照順序處理資料。
2、get()和put()方法
1.get()是發送資料,put()是接收資料,可以在執行個體化產生對象的時候設定訊息佇列的長度,即queue.Queue(100).
2、執行個體:
注釋:該方法是按照先進先出的機制來處理資料的,即先進來的資料現得到處理。
2、join()和task_done()
1.
2.其他用法
q.qsize() 返回隊列的大小 q.empty() 如果隊列為空白,返回True,反之False
q.full() 如果隊列滿了,返回True,反之False
q.full 與 maxsize 大小對應
q.get([block[, timeout]]) 擷取隊列,timeout等待時間
q.get_nowait() 相當q.get(False)非阻塞
q.put(item) 寫入隊列,timeout等待時間
q.put_nowait(item) 相當q.put(item, False)
q.task_done() 在完成一項工作之後,
q.task_done() 函數向任務已經完成的隊列發送一個訊號
q.join() 實際上意味著等到隊列為空白,再執行別的操作
3、其他模式
1、Python Queue模組的FIFO隊列先進先出。class queue.Queue(maxsize)
2、LIFO類似於堆,即先進後出。 class queue.LifoQueue(maxsize)
3、還有一種是優先順序隊列層級越低越先出來。 class queue.PriorityQueue(maxsize)
走入電腦的第三十七天(python的進階用法)