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实现ip查询示例
Mar 26 Python
探索Python3.4中新引入的asyncio模块
Apr 08 Python
Python 编码处理-str与Unicode的区别
Sep 06 Python
Python序列化基础知识(json/pickle)
Oct 19 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
Apr 05 Python
python实现简单的单变量线性回归方法
Nov 08 Python
python实现n个数中选出m个数的方法
Nov 13 Python
python将pandas datarame保存为txt文件的实例
Feb 12 Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
Jul 22 Python
使用Tensorflow实现可视化中间层和卷积层
Jan 24 Python
python 实现多维数组(array)排序
Feb 28 Python
python源文件的字符编码知识点详解
Mar 04 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实现MySQL更新记录的代码
2008/06/07 PHP
在PHP中检查PHP文件是否有语法错误的方法
2009/12/23 PHP
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
2009/10/25 Javascript
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
纯js简单日历实现代码
2013/10/05 Javascript
JavaScript获取路径设计源码
2014/05/22 Javascript
javascript相关事件的几个概念
2015/05/21 Javascript
JS实现表单中checkbox对勾选中增加边框显示效果
2015/08/21 Javascript
nodejs基础应用
2017/02/03 NodeJs
Vuex模块化实现待办事项的状态管理
2017/03/15 Javascript
JS二分查找算法详解
2017/11/01 Javascript
Angular4学习教程之DOM属性绑定详解
2018/01/04 Javascript
layui按条件隐藏表格列的实例
2019/09/19 Javascript
为什么Vue3.0使用Proxy实现数据监听(defineProperty表示不背这个锅)
2019/10/14 Javascript
js实现简单放大镜效果
2020/03/07 Javascript
js瀑布流布局的实现
2020/06/28 Javascript
Node快速切换版本、版本回退(降级)、版本更新(升级)
2021/01/07 Javascript
python魔法方法-属性访问控制详解
2016/07/25 Python
Python日志模块logging基本用法分析
2018/08/23 Python
详解Python函数式编程—高阶函数
2019/03/29 Python
python3.6环境安装+pip环境配置教程图文详解
2019/06/20 Python
python 画出使用分类器得到的决策边界
2019/08/21 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
泰国汽车、火车和轮渡票预订网站:Bus Online Ticket
2017/09/09 全球购物
外企求职信范文分享
2013/12/31 职场文书
集体婚礼证婚词
2014/01/13 职场文书
岗位聘任书范文
2014/03/29 职场文书
建筑公司员工自我鉴定
2014/04/08 职场文书
个人典型事迹材料
2014/12/30 职场文书
2015年护士节活动总结
2015/02/10 职场文书
小升初自荐信怎么写
2015/03/26 职场文书
2015年高中语文教学总结
2015/08/18 职场文书
利用python调用摄像头的实例分析
2021/06/07 Python
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA
《火纹风花雪月无双》预告“神秘雇佣兵” 紫发剑客
2022/04/13 其他游戏