日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python 对象_Python中的Barrier对象

發(fā)布時(shí)間:2023/12/10 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 对象_Python中的Barrier对象 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

python中的Barrier對(duì)象用于等待固定數(shù)量的線程完成執(zhí)行,然后任何特定線程才能繼續(xù)執(zhí)行程序。每個(gè)線程在到達(dá)Barrier時(shí)都調(diào)用wait()函數(shù)。Barrier負(fù)責(zé)跟蹤wait()調(diào)用的數(shù)量。如果該數(shù)目超出了為其初始化Barrier的線程數(shù),則Barrier為等待線程提供了一種繼續(xù)執(zhí)行的方法。同時(shí)釋放執(zhí)行時(shí)的所有線程。

Barriers甚至可以用來同步線程之間的訪問。 但是,通常使用Barriers來組合線程的輸出。Barriers對(duì)象可以針對(duì)最初為其初始化的完全相同的線程數(shù)重復(fù)使用。

初始化barrier

可以使用threading.Barrier類初始化barrier,如下面的程序所示。括號(hào)內(nèi)的數(shù)字表示barrier應(yīng)等待的線程數(shù)。

語法

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

為number_of_threads創(chuàng)建一個(gè)barrier對(duì)象。如果提供了操作,則該操作是可調(diào)用的,可在線程釋放時(shí)由其中一個(gè)線程調(diào)用。如果沒有為wait()方法指定超時(shí),則timeout是默認(rèn)超時(shí)值。

import threading barrier = threading.Barrier(3) class thread(threading.Thread): def __init__(self, thread_ID): threading.Thread.__init__(self) self.thread_ID = thread_ID def run(self): print(str(self.thread_ID) + "") barrier.wait() thread1 = thread(100) thread2 = thread(101) thread1.start() thread2.start() barrier.wait() print("Exit")

輸出

100101Exit

與threading.Barrier類相關(guān)的一些常見函數(shù)調(diào)用為:

1)檢查barrier的狀態(tài)

broken:如果障礙處于broken狀態(tài),則為True的布爾值。

語法

barrier.broken

2)parties:穿過barrier所需的線程數(shù)。

語法

barrier.parties

3)中止barrier

abort:將barrier置于broken狀態(tài)。這會(huì)導(dǎo)致任何對(duì)wait()的活動(dòng)調(diào)用或?qū)淼恼{(diào)用都失敗,并出現(xiàn)BrokenBarrierError。

在程序執(zhí)行過程中,經(jīng)常需要通過對(duì)barrier進(jìn)行中止功能調(diào)用來跳過死鎖的條件。

語法

barrier.abort()

4)重置barrier

reset:將barrier 返回到默認(rèn)的空狀態(tài)。任何等待它的線程將收到BrokenBarrierError異常。

語法

barrier.reset()

5)wait:通過障礙。當(dāng)barrier的所有線程都調(diào)用了此函數(shù)后,它們將同時(shí)釋放。如果提供了超時(shí),則它優(yōu)先于提供給類構(gòu)造函數(shù)的任何超時(shí)使用。

返回值是一個(gè)整數(shù),范圍為0到parties–1,每個(gè)線程不同。如果呼叫超時(shí),barrier將進(jìn)入斷開狀態(tài)。如果在線程等待時(shí)barrier已斷開或重置,此方法可能會(huì)引發(fā)BrokenBarrierError異常。

語法

barrier.wait(timeout = None)

6)n_waiting:barrier中當(dāng)前正在等待的線程數(shù)。

語法

barrier.n_waiting

通常,當(dāng)barrier對(duì)象被重置或分解時(shí),會(huì)引發(fā)BrokenBarrierError異常。

這是一個(gè)示例程序,展示了如何在python中使用barrier

# program to demonstrate # barriers in python import threading barrier = threading.Barrier(3) class thread(threading.Thread): def __init__(self, thread_ID): threading.Thread.__init__(self) self.thread_ID = thread_ID def run(self): print(str(self.thread_ID) + "") print("Parties = " + str(barrier.parties) + "") print("n_waiting = " + str(barrier.n_waiting) + "") barrier.wait() thread1 = thread(100) thread2 = thread(101) thread1.start() thread2.start() barrier.wait() print(str(barrier.broken) + "") barrier.reset() print("n_waiting after reset = " + str(barrier.n_waiting)) barrier.abort() print("End")

輸出

100101Parties = 3Parties = 3n_waiting = 1n_waiting = 1Falsen_waiting after reset = 0End

總結(jié)

以上是生活随笔為你收集整理的python 对象_Python中的Barrier对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。