欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

python線程條件變量Condition(31)-創(chuàng)新互聯(lián)

對(duì)于線程與線程之間的交互我們?cè)谇懊娴奈恼乱呀?jīng)介紹了 python 互斥鎖Lock / python事件Event , 今天繼續(xù)介紹一種線程交互方式 –?線程條件變量Condition.

為河西等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及河西網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、成都網(wǎng)站建設(shè)、河西網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

python 線程條件變量Condition(31)

一.線程條件變量Condition相關(guān)函數(shù)介紹

acquire()?—? 線程鎖,注意線程條件變量Condition中的所有相關(guān)函數(shù)使用必須在acquire()?/release()?內(nèi)部操作;

release()?— 釋放鎖,注意線程條件變量Condition中的所有相關(guān)函數(shù)使用必須在acquire()?/release()?內(nèi)部操作;

wait(timeout)?—? 線程掛起(阻塞狀態(tài)),直到收到一個(gè)notify通知或者超時(shí)才會(huì)被喚醒繼續(xù)運(yùn)行(超時(shí)參數(shù)默認(rèn)不設(shè)置,可選填,類型是浮點(diǎn)數(shù),單位是秒)。wait()必須在已獲得Lock前提下才能調(diào)用,否則會(huì)觸發(fā)RuntimeError;

notify(n=1)?—? 通知其他線程,那些掛起的線程接到這個(gè)通知之后會(huì)開始運(yùn)行,缺省參數(shù),默認(rèn)是通知一個(gè)正等待通知的線程,最多則喚醒n個(gè)等待的線程。notify()必須在已獲得Lock前提下才能調(diào)用,否則會(huì)觸發(fā)RuntimeError,notify()不會(huì)主動(dòng)釋放Lock;

notifyAll()?—? 如果wait狀態(tài)線程比較多,notifyAll的作用就是通知所有線程;

python 線程條件變量Condition(31)

二.線程條件變量Condition原理

在前面的文章已經(jīng)介紹過互斥鎖,主要作用是并行訪問共享資源時(shí),保護(hù)共享資源,防止出現(xiàn)臟數(shù)據(jù)。python 條件變量Condition也需要關(guān)聯(lián)互斥鎖,同時(shí)Condition自身提供了wait/notify/notifyAll方法,用于阻塞/通知其他并行線程,可以訪問共享資源了??梢赃@么理解,Condition提供了一種多線程通信機(jī)制,假如線程1需要數(shù)據(jù),那么線程1就阻塞等待,這時(shí)線程2就去制造數(shù)據(jù),線程2制造好數(shù)據(jù)后,通知線程1可以去取數(shù)據(jù)了,然后線程1去獲取數(shù)據(jù)。

python 線程條件變量Condition(31)

三.線程條件變量Condition使用

案例一:成語接龍

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

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

# !usr/bin/env python

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

"""

@Author:何以解憂

@Blog(個(gè)人博客地址): shuopython.com

@WeChat Official Account(微信公眾號(hào)):猿說python

@Github:www.github.com

@File:python_.py

@Time:2019/10/21 21:25

@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅(jiān)持不懈地積累!

"""

# 導(dǎo)入線程模塊

importthreading

# 創(chuàng)建條件變量condition

con=threading.Condition()

defthread_one(name):

# 條件變量condition 線程上鎖

con.acquire()

print("{}:成語接龍準(zhǔn)備好了嗎".format(name))

# 喚醒正在等待(wait)的線程

con.notify()

# 等待對(duì)方回應(yīng)消息,使用wait阻塞線程,等待對(duì)方通過notify喚醒本線程

con.wait()

print("{}:一干二凈".format(name))

# 喚醒對(duì)方

con.notify()

# 等待消息答應(yīng)

con.wait()

print("{}:一天就知道看抖音美女,給你來個(gè)簡(jiǎn)單點(diǎn)的,來了:毛手毛腳".format(name))

# 喚醒對(duì)方

con.notify()

# 等待消息答應(yīng)

con.wait()

print("{}:喲喲喲,不錯(cuò)不錯(cuò)!".format(name))

# 喚醒對(duì)方

con.notify()

# 條件變量condition 線程釋放鎖

con.release()

defthread_two(name):

# 條件變量condition 線程上鎖

con.acquire()

# wait阻塞狀態(tài),等待其他線程通過notify喚醒本線程

con.wait()

print("{}:準(zhǔn)備好了~開始吧!".format(name))

# 喚醒對(duì)方

con.notify()

# 等待消息答應(yīng)

con.wait()

print("{}:凈你妹啊,沒法接...來個(gè)簡(jiǎn)單點(diǎn)的...".format(name))

# 喚醒對(duì)方

con.notify()

# 等待消息答應(yīng)

con.wait()

print("{}:嘿,這個(gè)我知道:腳踏實(shí)地".format(name))

# 喚醒對(duì)方

con.notify()

con.release()

if__name__=="__main__":

# 創(chuàng)建并初始化線程

t1=threading.Thread(target=thread_one,args=("A"))

t2=threading.Thread(target=thread_two,args=("B"))

# 啟動(dòng)線程 -- 注意線程啟動(dòng)順序,啟動(dòng)順序很重要

t2.start()

t1.start()

# 阻塞主線程,等待子線程結(jié)束

t1.join()

t2.join()

print("程序結(jié)束!")

輸出結(jié)果:

1

2

3

4

5

6

7

8

A:成語接龍準(zhǔn)備好了嗎

B:準(zhǔn)備好了~開始吧!

A:一干二凈

B:凈你妹啊,沒法接...來個(gè)簡(jiǎn)單點(diǎn)的...

A:一天就知道看抖音美女,給你來個(gè)簡(jiǎn)單點(diǎn)的,來了:毛手毛腳

B:嘿,這個(gè)我知道:腳踏實(shí)地

A:喲喲喲,不錯(cuò)不錯(cuò)!

程序結(jié)束!

python 線程條件變量Condition(31)

案例二:生產(chǎn)者與消費(fèi)者模式,以吃火鍋為例:一盤老肉片有10塊肉,吃完了又重新往鍋里加….

生產(chǎn)者:往鍋里加老肉片,每次加一盤(10塊);

消費(fèi)者:吃煮熟的肉片,沒吃一片,肉片數(shù)量減一,吃完為止;

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

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

# 導(dǎo)入線程模塊

importthreading

importtime

# 創(chuàng)建條件變量condition

con=threading.Condition()

meat_num=0

defthread_consumers():

# 條件變量condition 線程上鎖

con.acquire()

# 全局變量聲明關(guān)鍵字 global

globalmeat_num

meat_num=0

# 等待肉片下鍋煮熟

con.wait()

whileTrue:

print("我來一塊肉片...")

meat_num-=1

print("剩余肉片數(shù)量:%d"%meat_num)

time.sleep(0.5)

ifmeat_num==0:

# 肉片吃光了,通知老板添加肉片

print("老板,再來一份老肉片...")

con.notify()

# 肉片吃光了,等待肉片

con.wait()

# 條件變量condition 線程釋放鎖

con.release()

defthread_producer():

# 條件變量condition 線程上鎖

con.acquire()

# 全局變量聲明關(guān)鍵字 global

globalmeat_num

# 肉片熟了,可以開始吃了

meat_num=10

print("肉片熟了,可以開始吃了...")

con.notify()

whileTrue:

# 阻塞函數(shù),等待肉片吃完的通知

con.wait()

meat_num=10

# 添加肉片完成,可以繼續(xù)開吃

print("添加肉片成功!當(dāng)前肉片數(shù)量:%d"%meat_num)

time.sleep(1)

con.notify()

con.release()

if__name__=="__main__":

# 創(chuàng)建并初始化線程

t1=threading.Thread(target=thread_producer)

t2=threading.Thread(target=thread_consumers)

# 啟動(dòng)線程 -- 注意線程啟動(dòng)順序,啟動(dòng)順序很重要

t2.start()

t1.start()

# 阻塞主線程,等待子線程結(jié)束

t1.join()

t2.join()

print("程序結(jié)束!")

輸出結(jié)果:

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

肉片熟了,可以開始吃了...

我來一塊肉片...

剩余肉片數(shù)量:9

我來一塊肉片...

剩余肉片數(shù)量:8

我來一塊肉片...

剩余肉片數(shù)量:7

我來一塊肉片...

剩余肉片數(shù)量:6

我來一塊肉片...

剩余肉片數(shù)量:5

我來一塊肉片...

剩余肉片數(shù)量:4

我來一塊肉片...

剩余肉片數(shù)量:3

我來一塊肉片...

剩余肉片數(shù)量:2

我來一塊肉片...

剩余肉片數(shù)量:1

我來一塊肉片...

剩余肉片數(shù)量:0

老板,再來一份老肉片...

添加肉片成功!當(dāng)前肉片數(shù)量:10

我來一塊肉片...

剩余肉片數(shù)量:9

我來一塊肉片...

剩余肉片數(shù)量:8

我來一塊肉片...

剩余肉片數(shù)量:7

.............

注意:

1.全局變量要聲明關(guān)鍵字?global;

2.注意線程的啟動(dòng)順序,這個(gè)很重要;

四.重點(diǎn)總結(jié)

注意線程互斥鎖Lock/線程事件Event/線程條件變量Condition三者的區(qū)別,場(chǎng)景不同,使用方式也不同,前兩者一般可以作為簡(jiǎn)單的線程交互,線程條件變量Condition可以用于比較復(fù)雜的線程交互!

猜你喜歡:

1.python線程創(chuàng)建和參數(shù)傳遞

2.python線程互斥鎖Lock

3.python線程事件Event

4.python return邏輯判斷表達(dá)式

轉(zhuǎn)載請(qǐng)注明:猿說Python???python條件變量Condition

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)頁標(biāo)題:python線程條件變量Condition(31)-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://aaarwkj.com/article22/ppicc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、網(wǎng)站內(nèi)鏈服務(wù)器托管、網(wǎng)站導(dǎo)航、用戶體驗(yàn)Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
可以直接看内射的视频| 插入内射视频在线观看| 亚洲精品久久麻豆蜜桃| 欧美欧成人一区二区三区a∨| 欧美大片免费久久精品| 在线高清中文字幕三区| 色综合一区二区日本韩国亚洲| 亚洲青青草原一区二区| 国产一级一片内射视频| 中文乱码字幕午夜无线观看| 国产欧美日韩综合91| 夫妻爱爱视频在线观看| 极品女神福利视频久久| 中文字幕日本专区人妻| 国产午夜视频成人无遮挡| 日本亚洲精品一区二区三| 亚洲国产精品福利在线| 日韩深夜成人在线视频| 成人午夜黄色福利视频| 久久国产精品亚洲熟女66r| 亚洲欧美经典精品专区| 欧美黄片精品在线观看| 亚洲精品福利一二三区| 精品欧美一区二区三久久| 91久久久久久人妻精品粉嫩| 日韩av在线高清播放| 日本在线观看成人大片| 日麻批视频在线免费观看| 三级日本午夜在线观看| 久久精品人妻中文av| 日韩精品高清不卡一区二区三区| 日本在线高清精品人妻| 宅男午夜一区二区三区| 精品国产亚洲av未满十八| 欧美黄片高清免费播放| 亚洲精品尤物福利在线一区| 日韩欧美精品另类在线| 日日嗨av特一级黄淫片| 久久人热视频这里只有精品| 日本区一区二区三视频| 看看永久成人免费视频|