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 sys模块sys.path使用方法示例
Dec 04 Python
python采集博客中上传的QQ截图文件
Jul 18 Python
对于Python编程中一些重用与缩减的建议
Apr 14 Python
Python对字符串实现去重操作的方法示例
Aug 11 Python
Jupyter notebook远程访问服务器的方法
May 24 Python
如何爬取通过ajax加载数据的网站
Aug 15 Python
浅谈Python类中的self到底是干啥的
Nov 11 Python
Python3创建Django项目的几种方法(3种)
Jun 03 Python
Django serializer优化类视图的实现示例
Jul 16 Python
python操作redis数据库的三种方法
Sep 10 Python
python判断字符串以什么结尾的实例方法
Sep 18 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
Jan 29 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截取汉字乱码问题解决方法mb_substr函数的应用
2008/03/30 PHP
Linux下将excel数据导入到mssql数据库中的方法
2010/02/08 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
2013/08/07 PHP
php魔术函数__call()用法实例分析
2015/02/13 PHP
php实现网页端验证码功能
2017/07/11 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
详解PHP中的8个魔术常量
2020/07/06 PHP
PHP中->和=>的含义及使用示例解析
2020/08/06 PHP
javascript Math.random()随机数函数
2009/11/04 Javascript
Jquery网页出现的乱码问题的三种解决方法
2013/06/30 Javascript
seajs中模块的解析规则详解和模块使用总结
2014/03/12 Javascript
网站基于flash实现的Banner图切换效果代码
2014/10/14 Javascript
Javascript实现飞动广告效果的方法
2015/05/25 Javascript
自动完成的搜索框javascript实现
2016/02/26 Javascript
JS产生随机数的几个用法详解
2016/06/22 Javascript
jQuery基本选择器之标签名选择器
2016/09/03 Javascript
微信小程序 122100版本更新问题解决方案
2016/12/22 Javascript
CentOS 安装NodeJS V8.0.0的方法
2017/06/15 NodeJs
js实现带进度条提示的多视频上传功能
2020/12/13 Javascript
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
配置一个vue3.0项目的完整步骤
2019/04/26 Javascript
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
2019/06/19 Javascript
VUE.CLI4.0配置多页面入口的实现
2019/11/25 Javascript
node.js中module模块的功能理解与用法实例分析
2020/02/14 Javascript
JS async 函数的含义和用法实例总结
2020/04/08 Javascript
详解Nuxt内导航栏的两种实现方式
2020/04/16 Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
2020/11/04 Javascript
pytorch中tensor.expand()和tensor.expand_as()函数详解
2019/12/27 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
python 实现百度网盘非会员上传超过500个文件的方法
2021/01/07 Python
携程旅行网:中国领先的在线旅行服务公司
2017/02/17 全球购物
雷人标语集锦
2014/06/19 职场文书
乡镇党员干部群众路线对照检查材料思想汇报
2014/09/28 职场文书
元旦标语大全
2014/10/09 职场文书
初中政教处工作总结
2015/08/12 职场文书
Python操作CSV格式文件的方法大全
2021/07/15 Python