屏障提供了一种python同步技术,通过该技术,单个或多个线程可以等到一组活动中的某个点并一起取得进展。
要定义屏障对象,“线程。使用屏障”。
threading.Barrier(parties, action = None, timeout = None)
哪里,
双方=线程数
action =线程释放时由其中一个线程调用。
超时=默认超时值。如果未为指定wait()
超时值,则使用该超时值。
屏障类使用以下提到的方法。
序号 | 方法与说明 |
---|---|
1 | 各方 达到公共障碍点所需的多个线程。 |
2 | n_waiting 在公共屏障点中等待的线程数 |
3 | 断 一个布尔值,真阳性如果阻挡处于破碎状态别的假。 |
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("所有到达的障碍点!")
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 所有到达的障碍点!