欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

34.python線程障礙對象Barrier

python線程Barrier俗稱障礙對象,也稱柵欄,也叫屏障。

創(chuàng)新互聯(lián)公司服務(wù)項目包括連江網(wǎng)站建設(shè)、連江網(wǎng)站制作、連江網(wǎng)頁制作以及連江網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,連江網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到連江省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

?

34.python 線程障礙對象Barrier

一.線程障礙對象Barrier簡介

?

1

2

3

4

5

# 導入線程模塊

importthreading

?

# 障礙對象barrier

barrier=threading.Barrier(parties,action=None,timeout=None)

parties?—?線程計數(shù)器,記錄線程數(shù)量,也稱線程障礙數(shù)量;

action?—?是一個可調(diào)用函數(shù),當?shù)却木€程到達了線程障礙數(shù)量parties,其中一個線程會首先調(diào)用action?對應(yīng)函數(shù),之后再執(zhí)行線程自己內(nèi)部的代碼;

timeout?—?默認的超時時間;

34.python 線程障礙對象Barrier

二.線程障礙對象Barrier原理

與之前介紹 互斥鎖Lock/事件Event/定時器Timer等不同,多線程Barrier會設(shè)置一個線程障礙數(shù)量parties,如果等待的線程數(shù)量沒有達到障礙數(shù)量parties,所有線程會處于阻塞狀態(tài),當?shù)却木€程到達了這個數(shù)量就會喚醒所有的等待線程。

?

可能說的有點抽象,以播放器為例子:首先一個線程做播放器初始化工作(加載本地文件或者獲取播放地址),然后一個線程獲取視頻畫面,一個線程獲取視頻聲音,只有當初始化工作完畢,視頻畫面獲取完畢,視頻聲音獲取完畢,播放器才會開始播放,其中任意一個線程沒有完成,播放器會處于阻塞狀態(tài)直到三個任務(wù)都完成!

?

34.python 線程障礙對象Barrier

?

三.多線程障礙對象Barrier相關(guān)函數(shù)介紹

wait(timeout=None)?—?阻塞并嘗試通過障礙,如果等待的線程數(shù)量大于或者等于線程障礙數(shù)量parties,則表示障礙通過,執(zhí)行action?對應(yīng)函數(shù)并執(zhí)行線程內(nèi)部代碼,反之則繼續(xù)等待;

如果wait(timeout=None)?等待超時,障礙將進入斷開狀態(tài)!如果在線程等待期間障礙斷開或重置,此方法會引發(fā)BrokenBarrierError錯誤,注意添加異常處理,演示代碼查看案例一;

?

reset()?—?重置線程障礙數(shù)量,返回默認的空狀態(tài),即當前阻塞的線程重新來過,如果在線程等待期間障礙斷開或重置,此方法會引發(fā)BrokenBarrierError錯誤,注意添加異常處理,演示代碼查看案例二;

?

四.線程障礙對象Barrier使用

1.案例一:常規(guī)使用

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

# !usr/bin/env python

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

"""

@Author:何以解憂

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

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

@Github:www.github.com

?

@File:python_arbrier.py

@Time:2019/10/31 21:25

?

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

"""

?

# 導入線程模塊

importthreading

?

defplyer_display():

????print('初始化通過完成,音視頻同步完成,可以開始播放....')

?

# 設(shè)置3個障礙對象

barrier=threading.Barrier(3,action=plyer_display,timeout=None)

?

?

defplayer_init(statu):

????print(statu)

????try:

????????# 設(shè)置超時時間,如果2秒內(nèi),沒有達到障礙線程數(shù)量,

????????# 會進入斷開狀態(tài),引發(fā)BrokenBarrierError錯誤

????????barrier.wait(2)

????exceptExceptionase:# 斷開狀態(tài),引發(fā)BrokenBarrierError錯誤

????????print("等待超時了... ")

????else:

????????print("xxxyyyyxxxxxyyyyxxxyyyy")

?

if__name__=='__main__':

????

????statu_list=["init ready","video ready","audio ready"]

????thread_list=list()

????foriinrange(0,3):

????????t=threading.Thread(target=player_init,args=(statu_list[i],))

????????t.start()

????????thread_list.append(t)

?

????fortinthread_list:

????????t.join()

輸出結(jié)果:

1

2

3

4

5

6

7

initready

videoready

audioready

初始化通過完成,音視頻同步完成,可以開始播放....

xxxyyyyxxxxxyyyyxxxyyyy

xxxyyyyxxxxxyyyyxxxyyyy

xxxyyyyxxxxxyyyyxxxyyyy

注意:如果barrier.wait(timeout=None)等待超時,會進入斷開狀態(tài),引發(fā)BrokenBarrierError錯誤,為了程序的健壯性,最好加上異常處理;

?

2.案例二:重置線程障礙數(shù)量reset()

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

# 導入線程模塊

importthreading

?

defplyer_display():

????print('初始化通過完成,音視頻同步完成,可以開始播放....')

?

# 設(shè)置3個障礙對象

barrier=threading.Barrier(3,action=plyer_display,timeout=None)

?

?

defplayer_init(statu):

?

????whileTrue:

????????print(statu)

????????try:

????????????# 設(shè)置超時時間,如果2秒內(nèi),沒有達到障礙線程數(shù)量,

????????????# 會進入斷開狀態(tài),引發(fā)BrokenBarrierError錯誤

????????????barrier.wait(2)

????????exceptExceptionase:# 斷開狀態(tài),引發(fā)BrokenBarrierError錯誤

????????????# print("斷開狀態(tài)... ")

????????????continue

????????else:

????????????print("xxxyyyxxxyyyxxxyyy")

????????????break

?

if__name__=='__main__':

?

????statu_list=["init ready","video ready","audio ready"]

????thread_list=list()

????foriinrange(0,3):

????????t=threading.Thread(target=player_init,args=(statu_list[i],))

????????t.start()

????????

????????thread_list.append(t)

????????ifi==1:# 重置狀態(tài)

????????????print("動作片....")

????????????barrier.reset()

?

?

????fortinthread_list:

????????t.join()

輸出結(jié)果:

1

2

3

4

5

6

7

8

9

10

initready

videoready

動作片....

initready

videoready

audioready

初始化通過完成,音視頻同步完成,可以開始播放....

xxxyyyxxxyyyxxxyyy

xxxyyyxxxyyyxxxyyy

xxxyyyxxxyyyxxxyyy

注意:如果barrier.wait(timeout=None)等待超時,會進入斷開狀態(tài),引發(fā)BrokenBarrierError錯誤,為了程序的健壯性,最好加上異常處理;

?

猜你喜歡:

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

2.python多線程條件變量Condition

3.python多線程互斥鎖Lock

4.python多線程事件Event

5.python多線程定時器Timer

?

轉(zhuǎn)載請注明:猿說Python???python線程障礙對象Barrier

?

文章題目:34.python線程障礙對象Barrier
鏈接地址:http://www.chinadenli.net/article34/pejspe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷品牌網(wǎng)站建設(shè)虛擬主機軟件開發(fā)全網(wǎng)營銷推廣用戶體驗

廣告

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

成都網(wǎng)頁設(shè)計公司