快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

ThreadingBarrier代码笔记

Barrier简单演示

import threading
import logging

FORMAT = '%(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 threading
import logging

FORMAT = '%(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 threading
import logging

FORMAT = '%(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()

网站名称:ThreadingBarrier代码笔记
当前链接:http://6mz.cn/article/jjohsd.html

其他资讯