Python实现线程安全队列
最近学习spark,我主要使用pyspark api进行编程。
之前使用Python都是现学现用,用完就忘了也没有理解和记忆,因此这里把Python相关的知识也弥补和记录下来吧
多线程任务队列在实际项目中非常有用,关键的地方要实现队列的多线程同步问题,也即保证队列的多线程安全
例如:可以开多个消费者线程,每个线程上绑定一个队列,这样就实现了多个消费者同时处理不同队列上的任务
同时可以有多个生产者往队列发送消息,实现异步消息处理
先复习下互斥量和条件变量的概念:
互斥量(mutex)从本质上说是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。对互斥量进行加锁以后,任何其他试图再次对互斥锁加锁的线程将会阻塞直到当前线程释放该互斥锁。如果释放互斥锁时有多个线程阻塞,所有在该互斥锁上的阻塞线程都会变成可运行状态,第一个变为运行状态的线程可以对互斥锁加锁,其他线程将会看到互斥锁依然被锁住,只能回去再次等待它重新变为可用。
条件变量(cond)是在多线程程序中用来实现”等待–》唤醒”逻辑常用的方法。条件变量利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待”条件变量的条件成立”而挂起;另一个线程使“条件成立”。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。线程在改变条件状态前必须首先锁住互斥量,函数pthread_cond_wait把自己放到等待条件的线程列表上,然后对互斥锁解锁(这两个操作是原子操作)。在函数返回时,互斥量再次被锁住
条件变量总是与互斥锁一起使用的
Python的threading中定义了两种锁:threading.Lock和threading.RLock
两者的不同在于后者是可重入锁,也就是说在一个线程内重复LOCK同一个锁不会发生死锁,这与POSIX中的PTHREAD_MUTEX_RECURSIVE也就是可递归锁的概念是相同的, 互斥锁的API有三个函数,分别执行分配锁,上锁,解锁操作。
python的threading中的条件变量默认绑定了一个RLock,也可以在初始化条件变量的时候传进去一个自己定义的锁.
最后贴出我自己实现的简单线程安全任务队列
测试代码
转载于:https://juejin.im/post/5c7787def265da2ddb29785e
Python实现线程安全队列相关推荐
- python 线程安全队列_Python实现线程安全队列
原标题:Python实现线程安全队列 作者:愤怒的屎壳螂 来源:http://blog.csdn.net/hit0803107/article/details/52876143 最近学习spark,我 ...
- python 测试 多线程 _thread和threading模块 线程同步,线程优先级队列
文章目录 python 多线程简介 Python中使用线程的两种方式 1.函数式 示例 2.线程模块 示例 线程同步 示例 线程优先级队列( Queue)[暂时没用到,没仔细看] 示例 其他 thre ...
- 【Python爬虫学习笔记11】Queue线程安全队列和GIL全局解释器锁
Queue线程安全队列 在Python多线程编程中,虽然threading模块为我们提供了Lock类和Condition类借助锁机制来处理线程并发执行,但在实际开发中使用加锁和释放锁仍是一个经常性的且 ...
- python多线程队列处理_Python线程和队列使用的一点思考
Python线程和队列使用的一点思考 1. 斗哥采访环节请问为什么要使用线程? 答:为了提高程序速度,代码效率呀. 请问为什么要使用队列? 答:个人认为队列可以保证线程安全,实现线程间的同步,比较稳. ...
- python线程安全队列用法
2019独角兽企业重金招聘Python工程师标准>>> 1.今天来利用queue来实现一个线程安全队列. 2.场景:有时我们需要将一个大任务划分成很多小任务,每个小任务执行完得到结果 ...
- python 优先队列_Python Queue队列实现线程通信
queue 模块下提供了几个阻塞队列,这些队列主要用于实现线程通信.在 queue 模块下主要提供了三个类,分别代表三种队列,它们的主要区别就在于进队列.出队列的不同.关于这三个队列类的简单介绍如下: ...
- python多线程文件的数据续传_python38 1.线程一堆队列 2.事件Event 3.协程 4.断点续传...
复习 1.GIL锁 2.如何避免GIL锁给程序带来的效率影响 3.与自定义锁的区别 4. 线程池进程池 5 同步 异步 6.异步回调 1.GIL锁 全局解释器锁, 用来锁住解释器的互斥锁 为啥 ...
- 搞事情 -- python之线程
简介 操作系统线程理论 线程概念的引入背景 线程的特点 进程和线程的关系 使用线程的实际场景 用户级线程和内核级线程(了解) 线程和python 理论知识 线程的创建Threading.Thread类 ...
- Python实现线程池
Python实现线程池 最近在做一些文本处理方面的事情,考虑到程序利用并发性可以提高执行效率(不纠结特殊反例),于是入围的Idea如使用多进程或多线程达到期望的目标,对于进程或线程的创建是有代价的,那 ...
- Python 之 线程
进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行 ...
最新文章
- 超越最新无监督域自适应方法,研究人员提轻量CNN新架构OSNet
- JAVA SE学习day_11:集合的相关应用、增强型for循环、foreach方法、数组与集合的相互转换
- androidstudio返回之前界面_charles 如何修改服务器返回内容 - Breakpoints
- HTML哪些是块级元素,哪些是行内元素、
- Python的特殊成员
- SwiftUI AsyncImage cancelled 无法加载图片
- 11gR2 集群(CRS/GRID)新功能—— SCAN(Single Client Access Name)
- 7k7k游戏盒与逗游游戏库,你更喜欢哪个
- 安卓java游戏模拟器_Java手机游戏模拟器
- 16位LED恒流源芯片TC5020A,32*128点阵屏驱动函数
- linux运行程音乐软件,在Linux系统下用Wine 5.0运行酷狗音乐的使用体验
- MATLAB 数据拟合 (使用 polyfit 多项式曲线拟合、polyval)
- 2003sql php_Windows Server 2003下安装PHP +mssql2000
- 电影《Green book》观后感_已补全:携带着种族歧视的“光环”,艰难地获得朋友的相互依赖,依然得享受生活的酸甜苦咸。...
- 三季度现货白银基本面分析
- Debian安装中文输入法
- 学3DMAX主要就业方向是什么?
- tf.estimator.train_and_evaluate 详解
- Application Server
- 结束计算机进程的快捷键,结束进程快捷键是什么?Win7结束进程快捷键介绍
热门文章
- WordPress我安装成功了,容易!
- 设计了一个JavaScript的源代码混淆器
- Apache HBase 最新发布2.0.4 ,分布式数据库
- pandas读取csv文件数据并对指定字段分类使用matplotlib在一张图里画四张折线图子图
- 此系统上未启用启动项_解决系统死机的7种方法,维修电脑必备技巧,你知道几条...
- Layui第三方扩展LAY_EXCEL导出数据表格的数据
- 正则表达式 - php正则匹配内容?
- 提升技能必备网站(不定时更新)
- linux vim与less区别,linux中cat、more、less命令区别详解##less 最合适最好用,和vim一样好用...
- LINUX编译mate-desktop/pluma-1.24.0文本编辑器