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!