python 对象_Python中的Barrier对象
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.broken2)parties:穿過barrier所需的線程數(shù)。
語法:
barrier.parties3)中止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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eslint 禁用命令
- 下一篇: python把list转成字典_pyth