Python中的屏障物件
屏障提供了一種Python同步技術,多個執行緒可以等待一組活動中的某個點,然後一起繼續執行。
要定義屏障物件,可以使用“threading.Barrier”。
threading.Barrier(parties, action = None, timeout = None)
其中,
parties = 執行緒數
action = 當執行緒被釋放時,由其中一個執行緒呼叫。
timeout = 預設超時值。如果wait()沒有指定超時值,則使用此超時值。
屏障類使用以下方法。
| 序號 | 方法及描述 |
|---|---|
| 1 | parties 到達公共屏障點所需的執行緒數。 |
| 2 | n_waiting 在公共屏障點等待的執行緒數 |
| 3 | broken 布林值,True - 如果屏障處於中斷狀態,否則為False。 |
| 4 | wait( timeout = None) 等待直到收到通知或超時。如果呼叫執行緒在呼叫此方法時未獲取鎖,則會引發執行時錯誤。 此方法釋放底層鎖,然後阻塞,直到被另一個執行緒對同一條件變數的notify()或notify_all()方法呼叫喚醒,或者直到可選超時發生。一旦被喚醒或超時,它會重新獲取鎖並返回。 當存在*timeout*引數且不為**None**時,它應該是浮點數,以秒(或其分數)指定操作的超時時間。 |
| 5 | reset() 將屏障設定為預設狀態,即空狀態。等待它的執行緒將收到BrokenBarrierError。 |
| 6 | Abort() 這會將屏障置於中斷狀態。這會導致所有活動執行緒或將來對wait()的任何呼叫都失敗並出現BrokenBarrierError。 |
barrierThread.py
from random import randrange
from threading import Barrier, Thread
from time import ctime, sleep
num = 4
# 4 threads will need to pass this barrier to get released.
b = Barrier(num)
names = ['India', 'Japan', 'USA', 'China']
def player():
name = names.pop()
sleep(randrange(2, 5))
print('%s reached the barrier at: %s \n' % (name, ctime()))
b.wait()
threads = []
print("Race starts now…")
for i in range(num):
threads.append(Thread(target=player))
threads[-1].start()
"""
Below loop enables waiting for the threads to complete before moving on with the main script.
"""
for thread in threads:
thread.join()
print("All Reached Barrier Point!")結果
Race starts now… India reached the barrier at: Fri Jan 18 14:07:44 2019 China reached the barrier at: Fri Jan 18 14:07:44 2019 Japan reached the barrier at: Fri Jan 18 14:07:46 2019 USA reached the barrier at: Fri Jan 18 14:07:46 2019 All Reached Barrier Point!
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP