Threading Barrier 代码笔记
发表于:2024-11-29 作者:热门IT资讯网编辑
编辑最后更新 2024年11月29日,Barrier简单演示import threadingimport loggingFORMAT = '%(threadName)s %(thread)d %(message)s'logging.bas
Barrier简单演示
import threadingimport loggingFORMAT = '%(threadName)s %(thread)d %(message)s'logging.basicConfig(format=FORMAT, level=logging.INFO)def worker(barrier:threading.Barrier): logging.info("waiting for {} threading. ".format(barrier.n_waiting)) try: barrier_id = barrier.wait() logging.info('after barrier {}'.format(barrier_id)) # 显示等待的barrier实例数量 except threading.BrokenBarrierError: logging.info('Broken Barrier')barrier = threading.Barrier(3)for x in range(5): threading.Event().wait(2) threading.Thread(target=worker, name='worker-{}'.format(x), args=(barrier, )).start()
Barrier之 broken的代码演示
import threadingimport loggingFORMAT = '%(threadName)s %(thread)d %(message)s'logging.basicConfig(format=FORMAT, level=logging.INFO)def worker(barrier:threading.Barrier): logging.info('waitting 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 i in range(0, 9): if i == 2: barrier.abort() elif i == 6: barrier.reset() threading.Event().wait(2) threading.Thread(target=worker, args=(barrier, )).start()
Barrier之 wait方法超时演示
import threadingimport loggingFORMAT = '%(threadName)s %(thread)d %(message)s'logging.basicConfig(format=FORMAT, level=logging.INFO)def worker(barrier:threading.Barrier, i:int): logging.info('waitting for {} threads'.format(barrier.n_waiting)) try: if i < 3: barrier_id = barrier.wait(1) # 设定超时时间 else: if i == 6: barrier.reset() # 恢复屏障 barrier_id = barrier.wait() logging.info('after barrier {}'.format(barrier_id)) except threading.BrokenBarrierError: logging.info('broken barrier')barrier = threading.Barrier(3)for i in range(0, 9): threading.Event().wait(2) threading.Thread(target=worker, args=(barrier, i)).start()