Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【说站】python线程中Condition的原理

【说站】python线程中Condition的原理

作者头像
很酷的站长
发布于 2022-11-23 08:03:35
发布于 2022-11-23 08:03:35
39400
代码可运行
举报
运行总次数:0
代码可运行

python线程中Condition的原理

原理分析

1、Python条件变量Condition需要关联互斥锁,同时Condition本身提供了wait、notify、notifyAll方法。

2、用于阻塞、通知其他并行线程,可以访问共享资源。

Condition提供了一种多线程通信机制。如果线程1需要数据,线程1会堵塞等待,然后线程2会制造数据。线程2制造数据后,通知线程1可以获取数据,然后线程1会获取数据。

实例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# !usr/bin/env python
# -*- coding:utf-8 _*-
# 导入线程模块
import threading
 
# 创建条件变量condition
con = threading.Condition()
 
def thread_one(name):
    # 条件变量condition 线程上锁
    con.acquire()
 
    print("{}:成语接龙准备好了吗".format(name))
    # 唤醒正在等待(wait)的线程
    con.notify()
 
    # 等待对方回应消息,使用wait阻塞线程,等待对方通过notify唤醒本线程
    con.wait()
    print("{}:一干二净".format(name))
    # 唤醒对方
    con.notify()
 
    # 等待消息答应
    con.wait()
    print("{}:一天就知道看抖音美女,给你来个简单点的,来了:毛手毛脚".format(name))
    # 唤醒对方
    con.notify()
 
    # 等待消息答应
    con.wait()
    print("{}:哟哟哟,不错不错!".format(name))
    # 唤醒对方
    con.notify()
 
    # 条件变量condition 线程释放锁
    con.release()
 
def thread_two(name):
    # 条件变量condition 线程上锁
    con.acquire()
 
    # wait阻塞状态,等待其他线程通过notify唤醒本线程
    con.wait()
    print("{}:准备好了~开始吧!".format(name))
    # 唤醒对方
    con.notify()
 
    # 等待消息答应
    con.wait()
    print("{}:净你妹啊,没法接...来个简单点的...".format(name))
    # 唤醒对方
    con.notify()
 
    # 等待消息答应
    con.wait()
    print("{}:嘿,这个我知道:脚踏实地".format(name))
    # 唤醒对方
    con.notify()
 
    con.release()
 
if __name__ == "__main__":
 
    # 创建并初始化线程
    t1 = threading.Thread(target=thread_one,args=("A"))
    t2 = threading.Thread(target=thread_two,args=("B"))
 
    # 启动线程 -- 注意线程启动顺序,启动顺序很重要
    t2.start()
    t1.start()
 
    # 阻塞主线程,等待子线程结束
    t1.join()
    t2.join()
 
 
    print("程序结束!")
 
 
'''
输出结果:
 
A:成语接龙准备好了吗
B:准备好了~开始吧!
A:一干二净
B:净你妹啊,没法接...来个简单点的...
A:一天就知道看抖音美女,给你来个简单点的,来了:毛手毛脚
B:,这个我知道:脚踏实地
A:哟哟哟,不错不错!
程序结束!
'''

以上就是python线程中Condition的原理,希望对大家有所帮助。更多Python学习指路:python基础教程

本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。

收藏 | 0点赞 | 0打赏

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python 线程条件变量Condition
对于线程与线程之间的交互我们在前面的文章已经介绍了 python 互斥锁Lock / python事件Event , 今天继续介绍一种线程交互方式 – 线程条件变量Condition.
猿说编程[Python和C]
2020/03/07
9680
python 线程条件变量Condition
python 多线程 条件condition(并行编程 6)
class Consumers(threading.Thread): def init(self): threading.Thread.init(self)
用户5760343
2019/07/30
4330
python笔记11-多线程之Condition(条件变量)
前言 当小伙伴a在往火锅里面添加鱼丸,这个就是生产者行为;另外一个小伙伴b在吃掉鱼丸就是消费者行为。当火锅里面鱼丸达到一定数量加满后b才能吃,这就是一种条件判断了。 这就是本篇要讲的Condition(条件变量) 一、Condition Condition(条件变量)通常与一个锁关联。需要在多个Contidion中共享一个锁时,可以传递一个Lock/RLock实例给构造方法,否则它将自己生成一个RLock实例。 可以认为,除了Lock带有的锁定池外,Condition还包含一个等待池,池中的线程处于状态图中
上海-悠悠
2018/04/08
1.5K0
Python使用Condition对象实现多线程同步
使用Condition对象可以在某些事件触发后才处理数据或执行特定的功能代码,可以用于不同线程之间的通信或通知,以实现更高级别的同步。在内部实现上,Condition对象总是与某种锁对象相关联。 Condition对象除了具有acquire()和release()方法之外,还有wait()、wait_for()、notify()、notify_all()等方法: wait(timeout=None)方法会释放锁,并阻塞当前线程直到超时或其他线程针对同一个Condition对象调用了notify()/noti
Python小屋屋主
2018/04/16
1.2K0
python-多线程
如某个子线程的daemon属性为False(默认情况),主线程结束时会检测该子线程是否结束并等待它结束后再退出。若为True,则该子线程不管有没有运行玩,都会随主线程一起结束。
luxuantao
2021/02/24
2850
Python:线程、进程与协程(2)—
    上一篇博文介绍了Python中线程、进程与协程的基本概念,通过这几天的学习总结,下面来讲讲Python的threading模块。首先来看看threading模块有哪些方法和类吧。
py3study
2020/01/07
5780
Python:线程、进程与协程(2)—
python3 多线程编程
线程是CPU分配资源的基本单位。但一个程序开始运行,这个程序就变成了一个进程,而一个进程相当于一个或者多个线程。当没有多线程编程时,一个进程也是一个主线程,但有多线程编程时,一个进程包含多个线程,包括主线程。使用线程可以实现程序的并发。
py3study
2020/01/03
1.1K0
python的进程与线程
  进程是指运行中的应用程序,每个进程都有自己独立的地址空间(内存空间)。比如用户点击桌面的IE浏览器,就启动了一个进程,操作系统就会为该进程分配独立的地址空间。当用户再次点击IE浏览器,又启动了一个进程,操作系统将为新的进程分配新的独立的地址空间。多进程就是“多任务”,就像使用电脑时同时打开浏览器上网、打开播放器听歌、后台还默默运行着杀毒软件一样。现代操作系统如Mac OS X,UNIX,Linux,Windows等都支持多进程,每启动一个进程,操作系统便为该进程分配一个独立的内存空间。
步履不停凡
2019/08/23
7110
Python多线程学习
1、  函数式:调用thread模块中的start_new_thread()函数来产生新线程。如下例:
流柯
2018/08/30
3370
python(五)
创建线程对象以后,可以调用它的 start()方法来启动,该方法自动调用该类对象的 run()方法。
赤蓝紫
2023/01/02
2320
python(五)
Python线程之threading
线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。进程是资源分配的最小单位,线程是CPU调度的最小单位,每一个进程中至少有一个线程,线程可与属于同一进程的其它线程共享进程所拥有的全部资源,但是其本身基本上不拥有系统资源,只拥有一点在运行中必不可少的信息(如程序计数器、一组寄存器和栈)。
py3study
2020/01/13
3680
2018年8月25日多线程编程总结
PYTHON 本身也支持多任务处理,并且提供了如下的操作方式 多线程多任务处理机制   (比较常用) 多进程多任务处理机制   (不常用,大型项目开发或者系统开发会用) 协程多任务处理机制       (不常用)
武军超
2018/09/27
3940
Python 多线程 multithr
【Python】python 多线程两种实现方式 目前python提供了几种多线程实现方式 thread,threading,multithreading ,其中thread模块比较底层,而threading模块是对thread做了一些包装,可以更加方便的被使用。 2.7版本之前python对线程的支持还不够完善,不能利用多核CPU,但是2.7版本的python中已经考虑改进这点,出现了multithreading 模块。threading模块里面主要是对一些线程的操作对象化,创建Thread的class。一般来说,使用线程有两种模式:
py3study
2020/01/06
4380
Python 学习入门(21)—— 线程
本文介绍了Python对于线程的支持,包括“学会”多线程编程需要掌握的基础以及Python两个线程标准库的完整介绍及使用示例。
阳光岛主
2019/02/19
4220
Python 学习入门(21)—— 线程
python之线程、进程、协程
上述代码创建了10个“前台”线程,然后控制器就交给了CPU,CPU根据指定算法进行调度,分片执行指令。
菲宇
2019/06/13
5630
python–threading多线程总结[通俗易懂]
threading用于提供线程相关的操作,线程是应用程序中工作的最小单元。python当前版本的多线程库没有实现优先级、线程组,线程也不能被停止、暂停、恢复、中断。
全栈程序员站长
2022/09/06
8360
Python多进程、多线程、协程
在Unix/Linux中系统内核提供了fork系统调用来创建进程,根据不同的返回值来判断当前进程是子进程还是父进程,C语言代码示例如下:
chain
2018/06/05
2.6K14
python3--线程,锁,同步锁,递归锁,信号量,事件,条件和定时器,队列,线程池
这个99又赋值给n,进程变量就是99,所以每次都是赋值操作,赋值了100次,最终结果99,这样还是出现数据不安全的情况
py3study
2018/08/02
3.1K0
Python学习记录-多进程和多线程
狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
py3study
2020/01/07
7890
八、线程和进程 什么是线程(thread)?什么是进程(process)? 线程和进程的区别?Python GIL(Global Interpreter Lock)全局解释器锁
什么是线程(thread)? 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 一个线程是一个执行上下文,它是一个CPU需要执行一系列指令的所有信息。 假设你正在读一本书,你现在想休息一下,但是你希望能够回来,从你停止的地方继续阅读。实现这一目标的一种方法是记下页码、行号和字号。所以你读一本书的执行上下文是这三个数字。 如果你有一个室友,而且她使用的是同样的技术,她可以在你
酱紫安
2018/04/16
2.1K0
相关推荐
python 线程条件变量Condition
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文