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实现方法
Nov 18 Python
python集合类型用法分析
Apr 08 Python
Python中的Numeric包和Numarray包使用教程
Apr 13 Python
Python探索之pLSA实现代码
Oct 25 Python
matplotlib作图添加表格实例代码
Jan 23 Python
使用APScheduler3.0.1 实现定时任务的方法
Jul 22 Python
python 实现在无序数组中找到中位数方法
Mar 03 Python
python是怎么被发明的
Jun 15 Python
在django中查询获取数据,get, filter,all(),values()操作
Aug 09 Python
python Paramiko使用示例
Sep 21 Python
Python监听剪切板实现方法代码实例
Nov 11 Python
python利用pytesseract 实现本地识别图片文字
Dec 14 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
PHP5 面向对象(学习记录)
2009/12/02 PHP
PHP连接MYSQL数据库的3种常用方法
2017/02/27 PHP
thinkPHP5框架设置404、403等http状态页面的方法
2018/06/05 PHP
一个判断email合法性的函数[非正则]
2008/12/09 Javascript
JScript 脚本实现文件下载 一般用于下载木马
2009/10/29 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
基于jquery实现简单的分页控件
2016/03/17 Javascript
基于javascript实现全屏漂浮广告
2016/03/31 Javascript
基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
2016/05/12 Javascript
深入理解vue.js双向绑定的实现原理
2016/12/05 Javascript
Vue2.0 组件传值通讯的示例代码
2017/08/01 Javascript
如何用Node写页面爬虫的工具集
2018/10/26 Javascript
微信小程序自定义组件传值 页面和组件相互传数据操作示例
2019/05/05 Javascript
Vue 幸运大转盘实现思路详解
2019/05/06 Javascript
vue实现的请求服务器端API接口示例
2019/05/25 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
js动态生成表格(节点操作)
2021/01/12 Javascript
python实现排序算法
2014/02/14 Python
Python实现将n个点均匀地分布在球面上的方法
2015/03/12 Python
Python的Django中django-userena组件的简单使用教程
2015/05/30 Python
Python中的列表生成式与生成器学习教程
2016/03/13 Python
详解字典树Trie结构及其Python代码实现
2016/06/03 Python
tensorflow建立一个简单的神经网络的方法
2018/02/10 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
使用django的objects.filter()方法匹配多个关键字的方法
2019/07/18 Python
Python多继承以及MRO顺序的使用
2019/11/11 Python
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
测绘工程本科生求职信
2013/10/10 职场文书
上班早退检讨书
2014/01/09 职场文书
物业总经理岗位职责
2014/02/28 职场文书
安全环保演讲稿
2014/08/28 职场文书
党员对照检查剖析材料
2014/10/13 职场文书
学生逃课万能检讨书2000字
2015/02/17 职场文书
幼儿园奖惩制度范本
2015/08/05 职场文书
2015年国庆节寄语
2015/08/17 职场文书