python多线程高级锁condition简单用法示例


Posted in Python onNovember 07, 2019

本文实例讲述了python多线程高级锁condition简单用法。分享给大家供大家参考,具体如下:

多线程编程中如果使用Condition对象代替lock, 能够实现在某个事件触发后才处理数据, condition中含有的方法:

  • - wait:线程挂起,收到notify通知后继续运行
  • - notify:通知其他线程, 解除其它线程的wai状态
  • - notifyAll(): 通知所有线程
  • - acquire和release: 获得锁和解除锁, 与lock类似,
  • - enter和exit使得对象支持上下文操作:
def __enter__(self):
    return self._lock.__enter__()
  def __exit__(self, *args):
    return self._lock.__exit__(*args)

代码:

import threading
from threading import Condition
# condition
class XiaoAi(threading.Thread):
  def __init__(self, cond):
    self.cond = cond
    super().__init__(name="xiaoai")
  def run(self):
    self.cond.acquire()
    self.cond.wait()
    print('{}:ennn. '.format(self.name))
    self.cond.notify()
    self.cond.wait()
    print('{}:好嗒. '.format(self.name))
    self.cond.release()
class TianMao(threading.Thread):
  def __init__(self, cond):
    super().__init__(name="tiaomao")
    self.cond = cond
  def run(self):
    self.cond.acquire()
    print('{}:hello ~ xiaoai. '.format(self.name))
    self.cond.notify()
    self.cond.wait()
    print('{}:我们来念一首诗吧! . '.format(self.name))
    self.cond.notify()
    self.cond.release()
if __name__ == '__main__':
  condition = Condition()
  xiaoai = XiaoAi(condition)
  tianmao = TianMao(condition)
  # 启动顺序很重要
  xiaoai.start()
  tianmao.start()

打印结果:

tiaomao:hello ~ xiaoai.
xiaoai:ennn.
tiaomao:我们来念一首诗吧! .
xiaoai:好嗒

总结:

这个比较鸡肋

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
浅谈Python处理PDF的方法
Nov 10 Python
Request的中断和ErrorHandler实例解析
Feb 12 Python
Python中elasticsearch插入和更新数据的实现方法
Apr 01 Python
python/sympy求解矩阵方程的方法
Nov 08 Python
深度辨析Python的eval()与exec()的方法
Mar 26 Python
Python实现一个带权无回置随机抽选函数的方法
Jul 24 Python
python3.7 利用函数os pandas利用excel对文件名进行归类
Sep 29 Python
sklearn+python:线性回归案例
Feb 24 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
May 09 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
Aug 11 Python
python使用requests库爬取拉勾网招聘信息的实现
Nov 20 Python
python使用smtplib模块发送邮件
Dec 17 Python
python文件操作的简单方法总结
Nov 07 #Python
详解Django admin高级用法
Nov 06 #Python
Python全局锁中如何合理运用多线程(多进程)
Nov 06 #Python
Python实现socket非阻塞通讯功能示例
Nov 06 #Python
Python中生成一个指定长度的随机字符串实现示例
Nov 06 #Python
详解Python list和numpy array的存储和读取方法
Nov 06 #Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
Nov 06 #Python
You might like
php 编写安全的代码时容易犯的错误小结
2010/05/20 PHP
适合PHP初学者阅读的4本经典书籍
2016/09/23 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
2017/06/10 PHP
YII分模块加载路由的实现方法
2018/10/01 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
2019/06/25 PHP
js 第二代身份证号码的验证机制代码
2011/05/12 Javascript
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
nodejs教程之制作一个简单的文章发布系统
2014/11/21 NodeJs
JS+CSS实现带小三角指引的滑动门效果
2015/09/22 Javascript
深入php面向对象、模式与实践
2016/02/16 Javascript
购物车前端开发(jQuery和bootstrap3)
2016/08/27 Javascript
js实现StringBuffer的简单实例
2016/09/02 Javascript
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
Angular.js中用ng-repeat-start实现自定义显示
2016/10/18 Javascript
Vue.js路由vue-router使用方法详解
2017/03/20 Javascript
JS实现百度搜索接口及链接功能实例代码
2018/02/02 Javascript
Node.js net模块功能及事件监听用法分析
2019/01/05 Javascript
Antd中单个DatePicker限定时间输入范围操作
2020/10/29 Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
2020/11/04 Javascript
python基础_文件操作实现全文或单行替换的方法
2017/09/04 Python
简述Python2与Python3的不同点
2018/01/21 Python
1 行 Python 代码快速实现 FTP 服务器
2018/01/25 Python
python SVM 线性分类模型的实现
2019/07/19 Python
Django 在iframe里跳转顶层url的例子
2019/08/21 Python
python numpy中cumsum的用法详解
2019/10/17 Python
Python猴子补丁Monkey Patch用法实例解析
2020/03/23 Python
python:解析requests返回的response(json格式)说明
2020/04/30 Python
Keras-多输入多输出实例(多任务)
2020/06/22 Python
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
一个不错的HTML5 Canvas多层点击事件监听实例
2014/04/29 HTML / CSS
南威尔士家居商店:Leekes
2016/10/25 全球购物
迪卡侬印度官网:购买所有体育用品
2017/06/24 全球购物
业务主管岗位职责
2013/11/20 职场文书
《荷花》教学反思
2014/04/16 职场文书
2015年七夕爱情寄语
2015/03/24 职场文书
2016学习全国教书育人楷模先进事迹心得体会
2016/01/21 职场文书