python线程中Condition的原理

美女程序员鼓励师

原理分析

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

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

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

实例

# !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电脑。

以上是 python线程中Condition的原理 的全部内容, 来源链接: utcz.com/z/545214.html

回到顶部