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中的WSGI接口
May 11 Python
Python中datetime常用时间处理方法
Jun 15 Python
在Django的form中使用CSS进行设计的方法
Jul 18 Python
python中的内置函数max()和min()及mas()函数的高级用法
Mar 29 Python
详解js文件通过python访问数据库方法
Mar 03 Python
python实现AES加密解密
Mar 28 Python
Python将文字转成语音并读出来的实例详解
Jul 15 Python
Python数学形态学实例分析
Sep 06 Python
使用pyinstaller逆向.pyc文件
Dec 20 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
Dec 26 Python
基于Python的一个自动录入表格的小程序
Aug 05 Python
聊聊python中的异常嵌套
Sep 01 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基于工厂模式实现的计算器实例
2015/07/16 PHP
jquery 得到当前页面高度和宽度的两个函数
2010/02/21 Javascript
JS 类型转换常见方法小结
2010/05/31 Javascript
javascript删除字符串最后一个字符
2014/01/14 Javascript
使用CSS3的scale实现网页整体缩放
2014/03/18 Javascript
如何使用HTML5地理位置定位功能
2015/04/27 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
Nodejs下DNS缓存问题浅析
2016/11/16 NodeJs
JavaScript使用delete删除数组元素用法示例【数组长度不变】
2017/01/17 Javascript
bootstrap是什么_动力节点Java学院整理
2017/07/14 Javascript
JS原生数据双向绑定实现代码
2017/08/14 Javascript
Vuex 使用 v-model 配合 state的方法
2018/11/13 Javascript
微信小程序中使用echarts的实现方法
2019/04/24 Javascript
微信小程序合法域名配置方法
2019/05/06 Javascript
Vue表单之v-model绑定下拉列表功能
2019/05/14 Javascript
vue中@change兼容问题详解
2019/10/25 Javascript
vue 实现LED数字时钟效果(开箱即用)
2019/12/08 Javascript
node+vue实现文件上传功能
2020/05/28 Javascript
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
python 统计代码行数简单实例
2017/05/04 Python
Python基于动态规划算法解决01背包问题实例
2017/12/06 Python
对python append 与浅拷贝的实例讲解
2018/05/04 Python
pyQt4实现俄罗斯方块游戏
2018/06/26 Python
python实现两个文件夹的同步
2019/08/29 Python
关于PySnooper 永远不要使用print进行调试的问题
2021/03/04 Python
结合 CSS3 transition transform 实现简单的跑马灯效果的示例
2018/02/07 HTML / CSS
阿玛尼美妆英国官网:Giorgio Armani Beauty英国
2019/03/28 全球购物
普罗米修斯教学反思
2014/02/06 职场文书
财务会计自荐信范文
2014/02/21 职场文书
一句话工作感言
2014/03/01 职场文书
红领巾心向党演讲稿
2014/09/10 职场文书
办理房产证委托书
2014/09/18 职场文书
计划生育工作汇报
2014/10/28 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
居住证明范文
2015/06/17 职场文书
呐喊读书笔记
2015/06/30 职场文书