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日志模块logging简介
Apr 13 Python
Python实现统计单词出现的个数
May 28 Python
python实现随机梯度下降(SGD)
Mar 24 Python
python scp 批量同步文件的实现方法
Jan 03 Python
NumPy 基本切片和索引的具体使用方法
Apr 24 Python
Pandas DataFrame中的tuple元素遍历的实现
Oct 23 Python
OpenCV哈里斯(Harris)角点检测的实现
Jan 15 Python
pycharm的python_stubs问题
Apr 08 Python
Python 下载Bing壁纸的示例
Sep 29 Python
如何利用python和DOS获取wifi密码
Mar 31 Python
利用Selenium添加cookie实现自动登录的示例代码(fofa)
May 08 Python
Python爬取奶茶店数据分析哪家最好喝以及性价比
Sep 23 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版(4)
2006/10/09 PHP
隐藏你的.php文件的实现方法
2007/03/19 PHP
php smarty函数扩展
2010/03/15 PHP
php计算一个文件大小的方法
2015/03/30 PHP
php+ajax无刷新分页实例详解
2015/12/07 PHP
基于PHP的登录和注册的功能的实现
2020/08/06 PHP
php封装实现钉钉机器人报警接口的示例代码
2020/08/08 PHP
原型方法的不同写法居然会影响调试的解决方法
2007/03/08 Javascript
jQuery EasyUI 的EasyLoader功能介绍
2010/09/12 Javascript
jquery ajax 局部刷新小案例
2014/02/08 Javascript
jquery选择符快速提取web表单数据示例
2014/03/27 Javascript
node.js正则表达式获取网页中所有链接的代码实例
2014/06/03 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
2014/10/31 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
微信小程序排坑指南详解
2018/05/23 Javascript
atom-design(Vue.js移动端组件库)手势组件使用教程
2019/05/16 Javascript
jQuery内容选择器与表单选择器实例分析
2019/06/28 jQuery
Layui 导航默认展开和菜单栏选中高亮设置的方法
2019/09/04 Javascript
[01:05:40]VG vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python中无限元素列表的实现方法
2014/08/18 Python
Python升级提示Tkinter模块找不到的解决方法
2014/08/22 Python
Django中的“惰性翻译”方法的相关使用
2015/07/27 Python
使用Python导出Excel图表以及导出为图片的方法
2015/11/07 Python
python实现批量图片格式转换
2020/06/16 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
2019/06/04 Python
在pytorch中实现只让指定变量向后传播梯度
2020/02/29 Python
台湾演唱会订票网站:StubHub台湾
2019/06/11 全球购物
JYSK加拿大:购买家具、床垫、家居装饰等
2020/02/14 全球购物
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
会计专业毕业生求职信分享
2014/01/03 职场文书
应届毕业生自荐信
2014/05/28 职场文书
2015年元宵节活动总结
2015/02/06 职场文书
2016年精神文明建设先进个人事迹材料
2016/02/29 职场文书
2016年中学法制宣传日活动总结
2016/04/01 职场文书