中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python線程事件Event的應用

發布時間:2020-06-19 15:05:50 來源:億速云 閱讀:173 作者:元一 欄目:編程語言

一.python事件Event相關函數介紹

線程之間用于交互的一個對象,這個event是一個內部的標簽,線程可以等待這個標簽的狀態,舉個例子,比如紅綠燈是一個線程,三輛汽車是3個線程,如果為紅燈,則三個汽車的線程必須要停止,如果是綠燈,則三個汽車的線程就可以跑起來。

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個美女,同時起跑,一人一個,自由選擇,先到先得…..

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

# !usr/bin/env python

# -*- coding:utf-8 _*-

# 導入線程模塊

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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

單身狗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主要用于喚醒正在阻塞等待狀態的線程;

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

杭锦后旗| 富锦市| 闸北区| 游戏| 天峻县| 金华市| 兴仁县| 衡水市| 香河县| 长宁区| 海门市| 信丰县| 隆林| 无棣县| 雷州市| 三明市| 泽普县| 洪雅县| 平安县| 温州市| 尉氏县| 和静县| 廊坊市| 崇阳县| 和平县| 双峰县| 曲阳县| 句容市| 雷波县| 军事| 安西县| 余庆县| 谷城县| 遵义县| 永平县| 贵德县| 大洼县| 如皋市| 定陶县| 韶关市| 安新县|