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 SDK写一个同步脚本及使用教程
Aug 23 Python
实例讲解Python中SocketServer模块处理网络请求的用法
Jun 28 Python
Python中反射和描述器总结
Sep 23 Python
Python 从列表中取值和取索引的方法
Dec 25 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
Aug 12 Python
基于python cut和qcut的用法及区别详解
Nov 22 Python
Anaconda和ipython环境适配的实现
Apr 22 Python
基于python实现对文件进行切分行
Apr 26 Python
Python基于pandas爬取网页表格数据
May 11 Python
如何把外网python虚拟环境迁移到内网
May 18 Python
keras之权重初始化方式
May 21 Python
python开发制作好看的时钟效果
May 02 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提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
php读取der格式证书乱码解决方法
2015/06/22 PHP
PHP实现图片上传并压缩
2015/12/22 PHP
php微信公众平台开发(一) 配置接口
2016/12/06 PHP
php获取小程序码的实现代码(B类接口)
2020/06/13 PHP
基于jQuery的获取标签名的代码
2012/07/16 Javascript
JS判定是否原生方法
2013/07/22 Javascript
利用JQuery和Servlet实现跨域提交请求示例分享
2014/02/12 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
2014/04/03 Javascript
javascript精确统计网站访问量实例代码
2015/12/19 Javascript
基于React.js实现原生js拖拽效果引发的思考
2016/03/30 Javascript
jquery选择器中的空格与大于号>、加号+与波浪号~的区别介绍
2016/06/24 Javascript
Javascript OOP之面向对象
2016/07/31 Javascript
AngularJS API之copy深拷贝详解及实例
2016/09/14 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
2016/12/09 Javascript
js实现图片360度旋转
2017/01/22 Javascript
vuejs2.0实现一个简单的分页示例
2017/02/22 Javascript
vue使用stompjs实现mqtt消息推送通知
2017/06/22 Javascript
nodejs实现的连接MySQL数据库功能示例
2018/01/25 NodeJs
vue data引入本地图片的两种方式小结
2019/11/13 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
python在控制台输出进度条的方法
2015/06/20 Python
python 利用for循环 保存多个图像或者文件的实例
2018/11/09 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
tensor和numpy的互相转换的实现示例
2019/08/02 Python
python实现mean-shift聚类算法
2020/06/10 Python
python中re模块知识点总结
2021/01/17 Python
DogBuddy荷兰:找到你最完美的狗保姆
2019/04/17 全球购物
美国相机和电子产品零售商:Beach Camera
2020/11/26 全球购物
2019年c语言经典面试题目
2016/08/17 面试题
新年晚会主持词
2014/03/24 职场文书
工作失误检讨书范文
2015/01/26 职场文书
老人与海读书笔记
2015/06/26 职场文书
2016廉政教育学习心得体会
2016/01/25 职场文书
css3中transform属性实现的4种功能
2021/08/07 HTML / CSS
详解使用内网穿透工具Ngrok代理本地服务
2022/03/31 Servers