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操作字符串之rindex()方法的使用
May 19 Python
python字符类型的一些方法小结
May 16 Python
Python 数据处理库 pandas进阶教程
Apr 21 Python
对Python 网络设备巡检脚本的实例讲解
Apr 22 Python
利用Python实现在同一网络中的本地文件共享方法
Jun 04 Python
Django 多环境配置详解
May 14 Python
关于ResNeXt网络的pytorch实现
Jan 14 Python
Python实现遗传算法(二进制编码)求函数最优值方式
Feb 11 Python
Python selenium爬取微博数据代码实例
May 22 Python
利用PyTorch实现VGG16教程
Jun 24 Python
python代数式括号有效性检验示例代码
Oct 04 Python
浅谈Python列表嵌套字典转化的问题
Apr 07 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将数据库中的电话号码读取出来并生成图片
2008/08/31 PHP
UCenter Home二次开发指南
2009/05/28 PHP
基于PHP Web开发MVC框架的Smarty使用说明
2013/04/19 PHP
phpinfo无法显示的原因及解决办法
2019/02/15 PHP
JavaScipt基本教程之JavaScript语言的基础
2008/01/16 Javascript
node.js中的fs.unlinkSync方法使用说明
2014/12/15 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
Node.js编程中客户端Session的使用详解
2015/06/23 Javascript
基于jQuery实现响应式圆形图片轮播特效
2015/11/25 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
AngularJS ng-repeat数组有重复值的解决方法
2016/10/23 Javascript
Bootstrap CSS布局之代码
2016/12/17 Javascript
jQuery代码实现实时获取时间
2017/01/29 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
ES6中Symbol、Set和Map用法详解
2019/08/20 Javascript
关于javascript中的promise的用法和注意事项(推荐)
2021/01/15 Javascript
tornado捕获和处理404错误的方法
2014/02/26 Python
python中ConfigParse模块的用法
2014/09/29 Python
在Python的列表中利用remove()方法删除元素的教程
2015/05/21 Python
浅析Python编写函数装饰器
2016/03/18 Python
VSCode下好用的Python插件及配置
2018/04/06 Python
pandas 获取季度,月度,年度首尾日期的方法
2018/04/11 Python
python 实现批量xls文件转csv文件的方法
2018/10/23 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
2019/04/05 Python
python 合并多个excel中同名的sheet
2021/01/22 Python
国外平面设计素材网站:The Hungry JPEG
2017/03/28 全球购物
Easy Spirit官网:美国休闲鞋履中的代表品牌
2019/04/12 全球购物
表演方阵解说词
2014/02/08 职场文书
在宿舍喝酒的检讨书
2014/09/28 职场文书
中学教师个人总结
2015/02/10 职场文书
安全教育观后感
2015/06/17 职场文书
民警忠诚教育心得体会
2016/01/23 职场文书
详解PHP服务器如何在有限的资源里最大提升并发能力
2021/05/25 PHP
Python机器学习实战之k-近邻算法的实现
2021/11/27 Python
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技