目錄
- 一.Python 執行緒事件 Event 函式介紹
- 二.Python 執行緒事件 Event 原理
- 三.Python 執行緒事件 Event 使用
- 四.重點總結
- 五.猜你喜歡
零基礎 Python 學習路線推薦 : Python 學習目錄 >> Python 基礎入門
在 Python 專案開發中,執行緒 thread 使用是比較常見的,在前面的文章中我們介紹了 Python 執行緒的創建 以及 執行緒互斥鎖 Lock ,今天還要額外介紹一個與執行緒相關的內容 –事件 Event ,
一.Python 執行緒事件 Event 函式介紹
- set — 全域內置標志 Flag,將標志 Flag 設定為 True,通知在等待狀態 ( wait ) 的執行緒恢復運行;
- isSet — 獲取標志 Flag 當前狀態,回傳 True 或者 False ;
- wait — 一旦呼叫,執行緒將會處于阻塞狀態,直到等待其他執行緒呼叫 set 函式恢復運行;
- clear — 將標志設定為 False;
二.Python 執行緒事件 Event 原理
事件 event 中有一個全域內置標志 Flag,值為 True 或者 False,使用 wait 函式的執行緒會處于阻塞狀態,此時 Flag 指為 False,直到有其他執行緒呼叫 set 函式讓全域標志 Flag 置為 True ,其阻塞的執行緒立刻恢復運行,還可以用 isSet 函式檢查當前的 Flag 狀態.
三.Python 執行緒事件 Event 使用
假如有這樣一個場景:有 10 個單身狗,對面 100 米有 10 個美女,同時起跑,一人一個,自由選擇,先到先得……
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿說編程
@Blog(個人博客地址): www.codersrc.com
@File:Python 執行緒事件 Event.py
@Time:2021/05/04 07:37
@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
"""
# 匯入執行緒模塊
import threading
# 創建event事件
eEvent = threading.Event()
def get_girl_friend(id):
print("單身狗{}都準備完畢,內置Flag狀態:{}.....".format(id,eEvent.isSet()))
eEvent.wait()
print("單身狗%d告別單身....."%id)
if __name__ == "__main__":
thread_list = list()
for i in range(1,11):
# 創建并初始化執行緒
t = threading.Thread(target=get_girl_friend,args=(i,))
# 啟動執行緒
t.start()
# 將執行緒句柄添加list串列中
thread_list.append(t)
# 所有執行緒準備完畢,將event內置Flag設定為True,恢復正在阻塞的執行緒
eEvent.set()
# 遍歷串列,阻塞主執行緒
for t in thread_list:
# 阻塞主執行緒,等待所有子執行緒結束
t.join()
print("程式結束!")
'''
輸出結果:
單身狗1都準備完畢,內置Flag狀態:False.....
單身狗2都準備完畢,內置Flag狀態:False.....
單身狗3都準備完畢,內置Flag狀態:False.....
單身狗4都準備完畢,內置Flag狀態:False.....
單身狗5都準備完畢,內置Flag狀態:False.....
單身狗6都準備完畢,內置Flag狀態:False.....
單身狗7都準備完畢,內置Flag狀態:False.....
單身狗8都準備完畢,內置Flag狀態:False.....
單身狗9都準備完畢,內置Flag狀態:False.....
單身狗10都準備完畢,內置Flag狀態:False.....
單身狗5告別單身,內置Flag狀態:True.....
單身狗6告別單身,內置Flag狀態:True.....
單身狗7告別單身,內置Flag狀態:True.....
單身狗1告別單身,內置Flag狀態:True.....
單身狗8告別單身,內置Flag狀態:True.....
單身狗10告別單身,內置Flag狀態:True.....
單身狗4告別單身,內置Flag狀態:True.....
單身狗9告別單身,內置Flag狀態:True.....
單身狗3告別單身,內置Flag狀態:True.....
單身狗2告別單身,內置Flag狀態:True.....
程式結束!
'''
四.重點總結
注意互斥鎖 Lock 與事件 Event 區別,需求不同,使用方式也不同:
- 互斥鎖 Lock 主要針對多個執行緒同時操作同一個資料,使用互斥鎖可以保證資料正常修改或者訪問;
- 事件 Event 主要用于喚醒正在阻塞等待狀態的執行緒;
五.猜你喜歡
- Python 條件推導式
- Python 串列推導式
- Python 字典推導式
- Python 函式宣告和呼叫
- Python 不定長引數 *argc/**kargcs
- Python 匿名函式 lambda
- Python return 邏輯判斷運算式
- Python 字串/串列/元組/字典之間的相互轉換
- Python 區域變數和全域變數
- Python type 函式和 isinstance 函式區別
- Python is 和 == 區別
- Python 可變資料型別和不可變資料型別
- Python 淺拷貝和深拷貝
- Python 檔案讀寫操作
- Python 例外處理
- Python 模塊 import
- Python __name__ == ‘__main__’詳細解釋
未經允許不得轉載:猿說編程 ? Python 執行緒事件 Event
本文由博客 - 猿說編程 猿說編程 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/288362.html
標籤:其他
上一篇:PHP中的MySQLi擴展學習(三)mysqli的基本操作
下一篇:原始碼分析Gateway請求轉發
