Barrier는 단일 또는 다중 스레드가 활동 집합의 한 지점까지 대기하고 함께 진행하는 Python 동기화 기술 중 하나를 제공합니다.
장벽 객체를 정의하려면 "threading. 배리어'를 사용합니다.
threading.Barrier(parties, action = None, timeout = None)
어디,
-
당사자 =스레드 수
-
action =스레드가 해제될 때 스레드 중 하나에 의해 호출됩니다.
-
시간 초과 =기본 시간 초과 값입니다. wait()에 대한 timeout 값이 지정되지 않은 경우 이 timeout 값이 사용됩니다.
Barrier 클래스에서 사용하는 방법은 다음과 같습니다.
| Sr.No | 방법 및 설명 |
|---|---|
| 1 | 당사자 공통 장벽 지점에 도달하는 데 필요한 스레드 수. |
| 2 | 대기 중 공통 장벽 지점에서 대기 중인 스레드 수 |
| 3 | 깨짐 부울 값 True- 장벽이 깨진 상태이면 False입니다. |
| 4 | 대기( 시간 제한 =없음) 알림을 받거나 시간 초과가 발생할 때까지 기다리십시오. 이 메서드가 호출될 때 호출 스레드가 잠금을 획득하지 않은 경우 런타임 오류가 발생합니다. 이 메서드는 기본 잠금을 해제한 다음 다른 스레드의 동일한 조건 변수에 대한 notify() 또는 notify_all() 메서드 호출로 깨울 때까지 또는 선택적 시간 초과가 발생할 때까지 차단합니다. 깨어나거나 시간이 초과되면 잠금을 다시 획득하고 반환합니다. 시간 초과 인수가 있고 없음이 아닙니다. , 작업 시간 초과를 초(또는 그 소수) 단위로 지정하는 부동 소수점 숫자여야 합니다. |
| 5 | 재설정() 배리어를 기본 상태로 설정하거나 되돌립니다. 빈 상태. 그리고 그것을 기다리는 스레드는 BrokenBarrierError를 수신합니다. |
| 6 | 중단() 이것은 장벽을 깨진 상태로 만들 것입니다. 이로 인해 모든 활성 스레드 또는 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!