Barrier屏障
有人翻译成栅栏,建议还是使用屏障,可以想象成路障,道闸,Python3.2引入的新功能
名称 含义 Barrier(parties,action=None,timerout=None) 构建Barrier对象,指定参与方数目,timerout是wait方法未指定超时的默认值 n_waiting 当前在屏障中等待的线程数 parties 各方数,就是需要多少等待 wait(timerout=None) 等待通过屏障。返回0到线程数-1的整数,每个线程返回不同,如果wait方法设置了超时,并超时发送,屏障将处于broken状态 Barrier实例
import threading import logging #输出自定义 FORMAT = '%(asctime)s-15s\t [%(threadName)s,%(thread)8d] %(message)s' logging.basicConfig(format=FORMAT,level=logging.INFO) def worker(barrier:threading.Barrier): logging.info("waiting for {} threads".format(barrier.n_waiting)) try: barrier_id = barrier.wait() logging.info("after barrier {}".format(barrier_id)) except threading.BrokenBarrierError: logging.info("Broken Barrier") barrier = threading.Barrier(3) for x in range(3): threading.Thread(target=worker,name="worker-{}".format(x),args=(barrier,)).start() logging.info("started") 结果: 2021-06-20 18:25:40,300-15s [worker-0, 13364] waiting for 0 threads 2021-06-20 18:25:40,301-15s [worker-1, 18264] waiting for 1 threads 2021-06-20 18:25:40,301-15s