Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 장벽 객체

<시간/>

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!