python模块学习(threading模块中的Barrier类)

学习版本3.5.2

Barrier类是设置了一个线程数量障碍,当等待的线程到达了这个数量就会唤醒所有的等待线程。

__init__(self, parties, action=None, timeout=None) parties障碍要求的线程数量 action设置了的话会在突破障碍的时候被某一个被唤醒的线程调用 timeout给之后的wait()设置了个默认的等待时间

wait(self, timeout=None) 当前线程进入阻塞状态

abort(self) 强行突破阻碍,所有正在等待的线程和要调用wait()方法的线程收到一个BrokenBarrierError异常

reset(self) 重置当前对象,所有正在等待的线程收到一个BrokenBarrierError异常


例子

#/usr/bin/python3
# -*- utf-8 -*-
#学习版本3.5.2

import threading
import time

def display():
    print("放了你们")

barrier = threading.Barrier(3,display)

class Chick(threading.Thread):
    def run(self):
        while True:
            print(self.getName(),": 你抓不到我")
            time.sleep(1)
            print(self.getName(),": 好吧,你抓到我了")
            try:
                barrier.wait()
            except threading.BrokenBarrierError:
                print("BrokenBarrierError")

if __name__ == "__main__":
    c1 = Chick(name="A")
    c2 = Chick(name="B")
    c3 = Chick(name="C")
    c1.start()
    c2.start()
    c3.start()
    time.sleep(2)
    #barrier.reset()
    print("main")

运行结果

A : 你抓不到我
B : 你抓不到我
C : 你抓不到我
A : 好吧,你抓到我了
C : 好吧,你抓到我了
B : 好吧,你抓到我了
放了你们
B : 你抓不到我
C : 你抓不到我
A : 你抓不到我
main
B : 好吧,你抓到我了
C : 好吧,你抓到我了
A : 好吧,你抓到我了
放了你们
A : 你抓不到我
B : 你抓不到我
C : 你抓不到我
B : 好吧,你抓到我了
C : 好吧,你抓到我了
A : 好吧,你抓到我了
放了你们
...


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值