import threading
import logging
logging.basicConfig(level=logging.INFO,format='%(thread)d %(threadName)s %(message)s')
def work(barrier:threading.Barrier):
logging.info('n_waitting = {}'.format(barrier.n_waiting))
try:
bid = barrier.wait()
logging.info('after barrier {}'.format(bid))
except threading.BrokenBarrierError:
logging.info('Broken Barrier in {}'.format(threading.current_thread().name))
barrier = threading.Barrier(3)
for x in range(3):
threading.Thread(target=work,args=(barrier,)).start()
运行结果:
140666055436032 Thread-1 n_waitting = 0
140666047043328 Thread-2 n_waitting = 1
140666038650624 Thread-3 n_waitting = 2
140666038650624 Thread-3 after barrier 2
140666055436032 Thread-1 after barrier 0
140666047043328 Thread-2 after barrier 1
改进:
import threading
import logging
logging.basicConfi