Python 线程障碍对象 Barrier - Python零基础入门教程

目录

  • 一.Python 线程障碍对象 Barrier 简介
  • 二.Python 线程障碍对象 Barrier 原理
  • 三.Python 线程障碍对象 Barrier 函数介绍
  • 四.Python 线程障碍对象 Barrier 使用
    • 1.案例一:常规使用
    • 2.案例二:重置线程障碍数量 reset
  • 五.猜你喜欢

零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门

Python 线程 Barrier 俗称障碍对象,也称栅栏,也叫屏障。​

一.Python 线程障碍对象 Barrier 简介

# 导入线程模块
import threading'''
参数介绍:parties — 线程计数器,记录线程数量,也称线程障碍数量;action — 是一个可调用函数,当等待的线程到达了线程障碍数量parties,其中一个线程会首先调用action 对应函数,之后再执行线程自己内部的代码;timeout — 默认的超时时间;
'''# 障碍对象barrier 
barrier = threading.Barrier(parties, action=None, timeout=None)

二.Python 线程障碍对象 Barrier 原理

与之前介绍 互斥锁 Lock / 事件 Event / 定时器 Timer 等不同,多线程 Barrier 会设置一个线程障碍数量 parties ,如果等待的线程数量没有达到障碍数量 parties ,所有线程会处于阻塞状态,当等待的线程到达了这个数量就会唤醒所有的等待线程。

可能说的有点抽象,以播放器为例子:首先一个线程做播放器初始化工作(加载本地文件或者获取播放地址),然后一个线程获取视频画面,一个线程获取视频声音,只有当初始化工作完毕,视频画面获取完毕,视频声音获取完毕,播放器才会开始播放,其中任意一个线程没有完成,播放器会处于阻塞状态直到三个任务都完成!

三.Python 线程障碍对象 Barrier 函数介绍

wait(timeout=None) 阻塞并尝试通过障碍,如果等待的线程数量大于或者等于线程障碍数量 parties ,则表示障碍通过,执行 action 对应函数并执行线程内部代码,反之则继续等待;

如果 wait(timeout=None) 等待超时,障碍将进入断开状态!如果在线程等待期间障碍断开或重置,此方法会引发 BrokenBarrierError 错误,注意添加异常处理,演示代码查看案例一;

reset 重置线程障碍数量,返回默认的空状态,即当前阻塞的线程重新来过,如果在线程等待期间障碍断开或重置,此方法会引发 BrokenBarrierError 错误,注意添加异常处理,演示代码查看案例二;

四.Python 线程障碍对象 Barrier 使用

1.案例一:常规使用

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 线程障碍对象 Barrier.py
@Time:2021/05/04 07:37
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!"""# 导入线程模块
import threadingdef plyer_display():print('初始化通过完成,音视频同步完成,可以开始播放....')# 设置3个障碍对象
barrier = threading.Barrier(3, action=plyer_display, timeout=None)def player_init(statu):print(statu)try:# 设置超时时间,如果2秒内,没有达到障碍线程数量,# 会进入断开状态,引发BrokenBarrierError错误barrier.wait(2)except Exception as e: # 断开状态,引发BrokenBarrierError错误print("等待超时了... ")else:print("xxxooooxxxxxooooxxxoooo")if __name__ == '__main__':statu_list = ["init ready","video ready","audio ready"]thread_list = list()for i in range(0,3):t = threading.Thread(target=player_init,args=(statu_list[i],))t.start()thread_list.append(t)for t in thread_list:t.join()'''
输出结果:init ready
video ready
audio ready
初始化通过完成,音视频同步完成,可以开始播放....
xxxooooxxxxxooooxxxoooo
xxxooooxxxxxooooxxxoooo
xxxooooxxxxxooooxxxoooo'''

注意:如果 barrier.wait(timeout=None) 等待超时,会进入断开状态,引发 BrokenBarrierError 错误,为了程序的健壮性,最好加上异常处理;

2.案例二:重置线程障碍数量 reset

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 线程障碍对象 Barrier.py
@Time:2021/05/04 07:37
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!"""# 导入线程模块
import threadingdef plyer_display():print('初始化通过完成,音视频同步完成,可以开始播放....')# 设置3个障碍对象
barrier = threading.Barrier(3, action=plyer_display, timeout=None)def player_init(statu):while True:print(statu)try:# 设置超时时间,如果2秒内,没有达到障碍线程数量,# 会进入断开状态,引发BrokenBarrierError错误barrier.wait(2)except Exception as e: # 断开状态,引发BrokenBarrierError错误# print("断开状态... ")continueelse:print("xxxooyyyxxxooyyyxxxooyyy")breakif __name__ == '__main__':statu_list = ["init ready","video ready","audio ready"]thread_list = list()for i in range(0,3):t = threading.Thread(target=player_init,args=(statu_list[i],))t.start()thread_list.append(t)if i == 1: # 重置状态print("不想看爱情片,我要看爱情动作片....")barrier.reset()for t in thread_list:t.join()'''
输出结果:init ready
video ready
不想看爱情片,我要看爱情动作片....
init ready
video ready
audio ready
初始化通过完成,音视频同步完成,可以开始播放....
xxxooyyyxxxooyyyxxxooyyy
xxxooyyyxxxooyyyxxxooyyy
xxxooyyyxxxooyyyxxxooyyy'''

注意:如果 barrier.wait(timeout=None) 等待超时,会进入断开状态,引发 BrokenBarrierError 错误,为了程序的健壮性,最好加上异常处理;

五.猜你喜欢

  1. Python 条件推导式
  2. Python 列表推导式
  3. Python 字典推导式
  4. Python 不定长参数 *argc/**kargcs
  5. Python 匿名函数 lambda
  6. Python return 逻辑判断表达式
  7. Python is 和 == 区别
  8. Python 可变数据类型和不可变数据类型
  9. Python 浅拷贝和深拷贝
  10. Python 异常处理
  11. Python 线程创建和传参
  12. Python 线程互斥锁 Lock
  13. Python 线程时间 Event
  14. Python 线程条件变量 Condition
  15. Python 线程定时器 Timer
  16. Python 线程信号量 Semaphore
  17. Python 线程障碍对象 Barrier
  18. Python 线程队列 Queue – FIFO
  19. Python 线程队列 LifoQueue – LIFO
  20. Python 线程优先队列 PriorityQueue
  21. Python 线程池 ThreadPoolExecutor(一)
  22. Python 线程池 ThreadPoolExecutor(二)
  23. Python 进程 Process 模块
  24. Python 进程 Process 与线程 threading 区别
  25. Python 进程间通信 Queue / Pipe
  26. Python 进程池 multiprocessing.Pool
  27. Python GIL 锁

未经允许不得转载:猿说编程 » Python 线程障碍对象 Barrier

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/525349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BugkuCTF-PWN题pwn1-瑞士军刀

注意: nc ip 端口 敲完回车没有回显,直接输入ls命令然后cat 文件即可 得到flag

Cloud一分钟 | 加码云计算!IBM斥340亿美元收购Red Hat

Hello,everyone:10月29日早,星期一,祝大家工作愉快!一分钟新闻时间:完1.微信群:添加小编微信:tangguoyemeng,备注“进群姓名公司职位”即可,加入【云计算学习…

Python 线程队列 Queue – FIFO - Python零基础入门教程

目录 一.Python 线程队列分类二.Python 线程先进先出队列 Queue 简介三.Python 线程先进先出队列 Queue 常用函数四.Python 线程先进先出队列 Queue 使用五.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 之前的文章中讲解很多关于线程间通…

BugkuCTF-WEB题网站被黑

利用御剑扫描后台或者通过dirsearch扫描一下目录看看 得到http://1147.67.246.176:15607/shell.php 打开这个网址 发现需要登录密码 通过Burp添加字典爆破密码为hack 输入得到flag

IBM 收购 RedHat(红帽)!340 亿美元

IBM今天宣布了以高达340亿美元的价格收购Red Hat,这笔交易在开源软件行业和云计算行业势必都会引起地震。Red Hat是将开源软件商业化的先驱之一,其采用的模式是,代码免费提供给其他公司使用,以便重新分发和修改。开源软件已逐渐成…

Python 线程队列 LifoQueue – LIFO - Python零基础入门教程

目录 一.Python 线程队列 Queue 分类二.Python 线程先进后出队列 LifoQueue 简介三.Python 线程先进后出队列 LifoQueue 函数介绍四.Python 线程先进后出队列 LifoQueue 使用五.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 在 Python 线…

BugkuCTF-WEB题本地管理员

基础知识: base64: 是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一类基于64个可打印字符来表示二进制数据的方法。 XFF伪造请求头: X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的…

你最关心的马蜂窝事件舆论全景图在这里,用文本挖掘一挖到底

原创作者:谭婧,苏格兰折耳喵企业作为社会基本的细胞,在守法盈利的同时,担负着服务消费者、社区、社会等利益相关方的重要责任。互联网企业是互联网时代的宠儿,举手投足备受关注。所谓成也萧何,败也萧何。大…

Kafka日志

位置 server.properties配置文件中通过log.dir指定日志存储目录 log.dir/{topic}-{partition} 核心文件 .log 存储消息的日志文件,固定大小为1G,写满后会新增一个文件,文件名表示当前日志文件记录的第一条消息的偏移量。 .index 以偏移…

BugkuCTF-WEB题源码

根据提示 查看源码 有URL编码 解码并将其拼接 有一个假flag提交 得到真flag

Python 线程优先队列 PriorityQueue - Python零基础入门教程

目录 一.Python 线程队列 Queue 分类二.Python 线程优先队列 PriorityQueue 简介三.Python 线程优先队列 PriorityQueue 函数介绍四.Python 线程优先队列 PriorityQueue 使用五.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 在 线程队列…

Cloud一分钟 | 14万中国人基因大数据是否外泄?运营商发展大数据优势何在?

Hello,everyone:10月30日早,星期二,祝大家工作愉快!一分钟新闻时间:完1.微信群:添加小编微信:tangguoyemeng,备注“进群姓名公司职位”即可,加入【云计算学习…

BugkuCTF-Reverse题easy-100(LCTF)

下载附件,得到apk文件 一道安卓逆向题,JEB反编译,查看 MainActivity 分析可得,主函数会先执行 p 函数,创建了一个按钮监听事件在 classs d 里,class d 里的 onclick 函数,当我们点击安卓的按钮…

Python 线程池 ThreadPoolExecutor(一) - Python零基础入门教程

目录 一.Python 线程池前言二.Python 线程池原理三.Python 线程池 ThreadPoolExecutor 函数介绍四.Python 线程池 ThreadPoolExecutor 简单使用五.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.Python 线程池前言 在前面的文章中我们…

Cloud一分钟 | 成本大增致谷歌财报蒙尘;Gartner发数据库魔力象限:阿里云成为黑马...

Hello,everyone:10月31日早,星期三,祝大家万圣节快乐!一分钟新闻时间:完1.微信群:添加小编微信:tangguoyemeng,备注“进群姓名公司职位”即可,加入【云计算学…

Python实现AES加密进行PKCS5Padding的填充

Python实现AES加密进行PKCS5Padding的填充 (1)Python 需要导入的模块 (2)AES加密代码 (3)AES解密代码 (4)测试代码 (5)测试结果

Python 线程池 ThreadPoolExecutor(二) - Python零基础入门教程

目录 一.Python 线程池前言二.Python 线程池 ThreadPoolExecutor 常用函数 1.线程池 as_completed 函数使用2.线程池 map 函数使用3.线程池 wait 函数使用 三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.Python 线程池前言 紧接着上…

Cloud一分钟 | 马云发表致股东的公开信;5G算什么?中国已着手研究6G相关工作...

Hello,everyone:11月01日早,星期四,新的一天祝大家工作愉快!一分钟新闻时间:完1.微信群:添加小编微信:tangguoyemeng,备注“进群姓名公司职位”即可,加入【云…

BugkuCTF-Reverse题First_Mobile(xman)

知识点 1.getByte() 功能:返回字符的ascii码值 2.equals() 功能:用于将字符串与指定的对象比较。 结果:相等时返回true,反之返回false 下载apk文件 使用jeb3打开反编译代码 分析,程序将editText里的内容进行一次encode.check检…

Python 进程 Process 模块 - Python零基础入门教程

目录 一.Python 进程 Process 简介二.Python 进程 Process 模块三.Python 进程 Process 函数介绍四.Python 进程 Process 使用五.Python 进程 Process 小窍门六.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.Python 进程 Process 简介…