最近学习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实现线程安全队列相关推荐

  1. python 线程安全队列_Python实现线程安全队列

    原标题:Python实现线程安全队列 作者:愤怒的屎壳螂 来源:http://blog.csdn.net/hit0803107/article/details/52876143 最近学习spark,我 ...

  2. python 测试 多线程 _thread和threading模块 线程同步,线程优先级队列

    文章目录 python 多线程简介 Python中使用线程的两种方式 1.函数式 示例 2.线程模块 示例 线程同步 示例 线程优先级队列( Queue)[暂时没用到,没仔细看] 示例 其他 thre ...

  3. 【Python爬虫学习笔记11】Queue线程安全队列和GIL全局解释器锁

    Queue线程安全队列 在Python多线程编程中,虽然threading模块为我们提供了Lock类和Condition类借助锁机制来处理线程并发执行,但在实际开发中使用加锁和释放锁仍是一个经常性的且 ...

  4. python多线程队列处理_Python线程和队列使用的一点思考

    Python线程和队列使用的一点思考 1. 斗哥采访环节请问为什么要使用线程? 答:为了提高程序速度,代码效率呀. 请问为什么要使用队列? 答:个人认为队列可以保证线程安全,实现线程间的同步,比较稳. ...

  5. python线程安全队列用法

    2019独角兽企业重金招聘Python工程师标准>>> 1.今天来利用queue来实现一个线程安全队列. 2.场景:有时我们需要将一个大任务划分成很多小任务,每个小任务执行完得到结果 ...

  6. python 优先队列_Python Queue队列实现线程通信

    queue 模块下提供了几个阻塞队列,这些队列主要用于实现线程通信.在 queue 模块下主要提供了三个类,分别代表三种队列,它们的主要区别就在于进队列.出队列的不同.关于这三个队列类的简单介绍如下: ...

  7. python多线程文件的数据续传_python38 1.线程一堆队列 2.事件Event 3.协程 4.断点续传...

    复习 1.GIL锁 2.如何避免GIL锁给程序带来的效率影响 3.与自定义锁的区别 4. 线程池进程池 5 同步 异步 6.异步回调 1.GIL锁 ​ 全局解释器锁, 用来锁住解释器的互斥锁 ​ 为啥 ...

  8. 搞事情 -- python之线程

    简介 操作系统线程理论 线程概念的引入背景 线程的特点 进程和线程的关系 使用线程的实际场景 用户级线程和内核级线程(了解) 线程和python 理论知识 线程的创建Threading.Thread类 ...

  9. Python实现线程池

    Python实现线程池 最近在做一些文本处理方面的事情,考虑到程序利用并发性可以提高执行效率(不纠结特殊反例),于是入围的Idea如使用多进程或多线程达到期望的目标,对于进程或线程的创建是有代价的,那 ...

  10. Python 之 线程

    进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行 ...

最新文章

  1. (转)关于数据库主键和外键(终于弄懂啦)
  2. [翻译] - Inside SQL Server 2000's Memory Management Facilities
  3. Redhat安装tftp的方法
  4. 解决:Intellij idea 启动项目报错 error:java: 无效的源发行版: 8
  5. 《软件项目管理(第二版)》期末考试试题总结/复习资料
  6. Windows Server 2008 R2远程用户数设置
  7. 【 Codeforces Round #552 (Div. 3) G】Minimum Possible LCM【埃氏筛】
  8. ecshop 模板页php,ECSHOP 模板结构说明
  9. matlab找异步电机,基于Matlab的异步电动机仿真
  10. EasyClick 易点云测自动化测试入门到精通
  11. 视频教程-Unity5入门及进阶项目实战 星际迷航-Unity3D
  12. python如何打开txt文件、并算词频_python读取word文本进行词频统计
  13. Qt编写安防视频监控系统58-子模块2窗口信息
  14. 提升执行力,小米手环打造TODO神器
  15. 火焰传感器+蜂鸣器 实现温度报警
  16. CodeForces_29B
  17. Live2D Web端实现
  18. 中国移动:持续引领5G后续标准制订
  19. python开源社区汇总_Github上热门Python开源项目盘点
  20. LCP 02. 分式化简-数学推导

热门文章

  1. 改写自SqlHelper的SqliteHelper
  2. 利用遗传算法求解旅行商问题
  3. 回发或回调参数无效。
  4. mysql各存储引擎介绍表格_十六、MySQL基础系列笔记之数据表存储引擎的介绍
  5. JS对数据进行判空操作
  6. 小程序的网络请求封装
  7. 牛客网面试题总结(试券)
  8. php mysql sql model_PHP数据库模型
  9. 矩阵的java程序怎么编写_如何编写Java程序以添加两个矩阵
  10. LINUX C正确遍历environ