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 实现插入排序算法
Jun 05 Python
python数据结构之二叉树的遍历实例
Apr 29 Python
Python类的多重继承问题深入分析
Nov 09 Python
python socket多线程通讯实例分析(聊天室)
Apr 06 Python
Python中遍历字典过程中更改元素导致异常的解决方法
May 12 Python
python中print的不换行即时输出的快速解决方法
Jul 20 Python
Python基于递归算法实现的走迷宫问题
Aug 04 Python
利用python实现微信头像加红色数字功能
Mar 26 Python
python pygame实现五子棋小游戏
Oct 26 Python
django 前端页面如何实现显示前N条数据
Mar 16 Python
python对接ihuyi实现短信验证码发送
May 10 Python
Python迭代器协议及for循环工作机制详解
Jul 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
如何在php中正确的使用json
2013/08/06 PHP
基于Swoole实现PHP与websocket聊天室
2016/08/03 PHP
PHP输出XML格式数据的方法总结
2017/02/08 PHP
PHP __call()方法实现委托示例
2019/05/20 PHP
利用WebBrowser彻底解决Web打印问题(包括后台打印)
2009/06/22 Javascript
分享27个jQuery 表单插件集合推荐
2011/04/25 Javascript
浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
2014/01/09 Javascript
javascript实现按回车键切换焦点
2015/02/09 Javascript
JavaScript数组常用方法
2015/03/02 Javascript
jQuery实现默认是闭合的FAQ展开效果菜单
2015/09/14 Javascript
JS函数arguments数组获得实际传参数个数的实现方法
2016/05/28 Javascript
JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
2016/08/03 Javascript
jquery心形点赞关注效果的简单实现
2016/11/14 Javascript
javascript获取以及设置光标位置
2017/02/16 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
解决vue打包css文件中背景图片的路径问题
2018/09/03 Javascript
BootStrap中的模态框(modal,弹出层)功能示例代码
2018/11/02 Javascript
微信小程序实现时间戳格式转换
2020/07/20 Javascript
详解Python pygame安装过程笔记
2017/06/05 Python
python实现嵌套列表平铺的两种方法
2018/11/08 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
python实现在cmd窗口显示彩色文字
2019/06/24 Python
django修改models重建数据库的操作
2020/03/31 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
2020/11/06 Python
摩顿布朗英国官方网上商店:奢华沐浴、身体和头发护理
2016/10/29 全球购物
现代生活方式的家具和装饰:Dot & Bo
2018/12/26 全球购物
什么是lambda函数
2013/09/17 面试题
简单的JAVA编程面试题
2013/03/19 面试题
计算机专业个人求职信范例
2013/09/23 职场文书
培训心得体会
2013/12/29 职场文书
校长先进事迹材料
2014/02/01 职场文书
优秀医生事迹材料
2014/02/12 职场文书
工地安全质量标语
2014/06/07 职场文书
公司董事长岗位职责
2014/06/08 职场文书
民主生活会对照检查材料(统计局)
2014/09/21 职场文书
css3带你实现3D转换效果
2022/02/24 HTML / CSS