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分析git log日志示例
Feb 27 Python
利用一个简单的例子窥探CPython内核的运行机制
Mar 30 Python
复习Python中的字符串知识点
Apr 14 Python
Python实现图像几何变换
Jul 06 Python
django Serializer序列化使用方法详解
Oct 16 Python
用python爬取租房网站信息的代码
Dec 14 Python
Python学习笔记之自定义函数用法详解
Jun 08 Python
详解python中index()、find()方法
Aug 29 Python
Python爬虫爬取Bilibili弹幕过程解析
Oct 10 Python
python手写均值滤波
Feb 19 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
Sep 09 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
Dec 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面向对象
2012/02/22 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
2014/06/25 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
2014/12/16 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
2015/05/11 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
2016/01/03 PHP
PHP二维数组去重算法
2016/12/17 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
用JavaScript脚本实现Web页面信息交互
2006/12/21 Javascript
javascript 定义新对象方法
2010/02/20 Javascript
jquery基础教程之deferred对象使用方法
2014/01/22 Javascript
判断iframe里的页面是否加载完成
2014/06/06 Javascript
javascript二维数组转置实例
2015/01/22 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
2015/09/06 Javascript
如何高效率去掉js数组中的重复项
2016/04/12 Javascript
AngularJS 服务详细讲解及示例代码
2016/08/17 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
学习使用jQuery表单验证插件和日历插件
2017/02/13 Javascript
js控制按钮,防止频繁点击响应的实例
2017/02/15 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
vue主动刷新页面及列表数据删除后的刷新实例
2018/09/16 Javascript
Vue.js更改调试地址端口号的实例
2018/09/19 Javascript
[48:47]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
10个易被忽视但应掌握的Python基本用法
2015/04/01 Python
详解使用Python处理文件目录的相关方法
2015/10/16 Python
使用Python的networkx绘制精美网络图教程
2019/11/21 Python
python设置表格边框的具体方法
2020/07/17 Python
使用CSS3实现圆角,阴影,透明
2014/12/23 HTML / CSS
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
navabi英国:设计师大码女装
2019/06/25 全球购物
雷朋巴西官方商店:Ray-Ban Brasil
2020/07/21 全球购物
大学生个人推荐信范文
2013/11/25 职场文书
2014年道德讲堂实施方案
2014/03/05 职场文书
副乡长民主生活会个人对照检查材料思想汇报
2014/10/01 职场文书
有限责任公司股东合作协议书
2014/12/02 职场文书
MySQL数据库压缩版本安装与配置详细教程
2021/05/21 MySQL
Python一行代码实现自动发邮件功能
2021/05/30 Python