wordpress培训班,seo做的好的网站有哪些,网站优化团队,门户网站如何增加流量python中的Barrier对象用于等待固定数量的线程完成执行#xff0c;然后任何特定线程才能继续执行程序。每个线程在到达Barrier时都调用wait()函数。Barrier负责跟踪wait()调用的数量。如果该数目超出了为其初始化Barrier的线程数#xff0c;则Barrier为等待线程提供了一种继续…python中的Barrier对象用于等待固定数量的线程完成执行然后任何特定线程才能继续执行程序。每个线程在到达Barrier时都调用wait()函数。Barrier负责跟踪wait()调用的数量。如果该数目超出了为其初始化Barrier的线程数则Barrier为等待线程提供了一种继续执行的方法。同时释放执行时的所有线程。Barriers甚至可以用来同步线程之间的访问。 但是通常使用Barriers来组合线程的输出。Barriers对象可以针对最初为其初始化的完全相同的线程数重复使用。初始化barrier可以使用threading.Barrier类初始化barrier如下面的程序所示。括号内的数字表示barrier应等待的线程数。语法barrier threading.Barrier(number_of_threads, action None, timeout None)为number_of_threads创建一个barrier对象。如果提供了操作则该操作是可调用的可在线程释放时由其中一个线程调用。如果没有为wait()方法指定超时则timeout是默认超时值。import threading barrier threading.Barrier(3) class thread(threading.Thread): def __init__(self, thread_ID): threading.Thread.__init__(self) self.thread_ID thread_ID def run(self): print(str(self.thread_ID) ) barrier.wait() thread1 thread(100) thread2 thread(101) thread1.start() thread2.start() barrier.wait() print(Exit) 输出100101Exit与threading.Barrier类相关的一些常见函数调用为1)检查barrier的状态broken如果障碍处于broken状态则为True的布尔值。语法barrier.broken2)parties穿过barrier所需的线程数。语法barrier.parties3)中止barrierabort将barrier置于broken状态。这会导致任何对wait()的活动调用或将来的调用都失败并出现BrokenBarrierError。在程序执行过程中经常需要通过对barrier进行中止功能调用来跳过死锁的条件。语法barrier.abort()4)重置barrierreset将barrier 返回到默认的空状态。任何等待它的线程将收到BrokenBarrierError异常。语法barrier.reset()5)wait通过障碍。当barrier的所有线程都调用了此函数后它们将同时释放。如果提供了超时则它优先于提供给类构造函数的任何超时使用。返回值是一个整数范围为0到parties–1每个线程不同。如果呼叫超时barrier将进入断开状态。如果在线程等待时barrier已断开或重置此方法可能会引发BrokenBarrierError异常。语法barrier.wait(timeout None)6)n_waitingbarrier中当前正在等待的线程数。语法barrier.n_waiting通常当barrier对象被重置或分解时会引发BrokenBarrierError异常。这是一个示例程序展示了如何在python中使用barrier# program to demonstrate # barriers in python import threading barrier threading.Barrier(3) class thread(threading.Thread): def __init__(self, thread_ID): threading.Thread.__init__(self) self.thread_ID thread_ID def run(self): print(str(self.thread_ID) ) print(Parties str(barrier.parties) ) print(n_waiting str(barrier.n_waiting) ) barrier.wait() thread1 thread(100) thread2 thread(101) thread1.start() thread2.start() barrier.wait() print(str(barrier.broken) ) barrier.reset() print(n_waiting after reset str(barrier.n_waiting)) barrier.abort() print(End) 输出100101Parties 3Parties 3n_waiting 1n_waiting 1Falsen_waiting after reset 0End