Python:线程同步,Barrier屏障

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	
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python 的多线程编程中,为了避免资源竞争和数据不一致的问题,我们需要使用同步机制来保证线程之间的协调。以下是几种常用的同步机制: 1. Lock(锁):Lock 是最基本的同步机制之一,它可以确保在同一时间只有一个线程可以访问共享资源。 2. RLock(可重入锁):RLock 是 Lock 的升级版,它允许同一个线程多次获得锁,从而避免了死锁的问题。 3. Semaphore(信号量):Semaphore 是一种计数器,它用来控制对共享资源的访问数量。当计数器为 1 时,Semaphore 就相当于 Lock;当计数器大于 1 时,Semaphore 就可以允许多个线程同时访问共享资源。 4. Condition(条件变量):Condition 是一种高级的同步机制,它允许线程在某个条件满足时被唤醒。通常情况下,Condition 和 Lock 一起使用,来实现线程间的协调和通信。 5. Event(事件):Event 是一种简单的同步机制,它允许线程在某个事件发生时被唤醒。通常情况下,Event 被用来协调多个线程的启动和停止。 6. Barrier屏障):Barrier 是一种同步机制,它可以让多个线程在某个点上进行同步,即所有线程必须同时到达该点才能继续执行。 以上是常见的同步机制,具体使用哪种机制则根据实际需求而定。在使用多线程编程时,需要注意线程之间的协调和通信,避免出现资源竞争和数据不一致的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值