python高并发-Condition

本文通过一个实例展示了Python中线程同步的Condition对象使用,包括wait、notify和notifyAll方法的交互,说明了它们在线程间通信和等待唤醒中的作用,以及在共享锁的情况下如何控制线程执行顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Condition, 实现在某个事件触发后才处理数据,在多个Contidion中共享一个锁。

wait和release的区别:
release和wait都有释放锁的作用,不同在于wait后,该子线程就在那里挂起等待,要继续执行,就需要接收到notify或者notifyAll来唤醒线程,而release该线程还能继续执行。
wait会释放锁但是会挂起线程,不会继续向下运行。而release释放锁后有可能该线程继续向下运行。

  • acquire([timeout])/release(): 调用关联的锁的相应方法。
  • wait([timeout]): 调用这个方法将使线程进入Condition的等待池等待通知,并释放锁。使用前线程必须已获得锁定,否则将抛出异常。
  • notify(): 调用这个方法将从等待池挑选一个线程并通知,收到通知的线程将自动调用
  • acquire()尝试获得锁定(进入锁定池);其他线程仍然在等待池中。调用这个方法不会释放锁定。使用前线程必须已获得锁定,否则将抛出异常。
  • notifyAll():调用这个方法将通知等待池中所有的线程,这些线程都将进入锁定池尝试获得锁定。调用这个方法不会释放锁定。使用前线程必须已获得锁定,否则将抛出异常。
import threading

class Xiansen(threading.Thread):
    def __init__(self, cond):
        super().__init__(name='先森')
        self.cond = cond

    def run(self):
        with self.cond:
            #调用with Condition之后才能调用wait和notify
            print(f"{self.name}: 小宝贝")
            self.cond.notify()
            self.cond.wait()

            print(f"{self.name}: 喜欢你喜欢你喜欢你")
            self.cond.notify()
            self.cond.wait()

class XiaoXianNv(threading.Thread):
    def __init__(self, cond):
        super().__init__(name='小仙女')
        self.cond = cond

    def run(self):
        with self.cond:

            self.cond.wait()
            print(f"{self.name}: 嗯哼?")
            self.cond.notify()

            self.cond.wait()
            print(f"{self.name}: 对不起,你是个坏人")
            self.cond.notify()

if __name__ == '__main__':
    cond = threading.Condition()
    kailin = Xiansen(cond)
    xiao = XiaoXianNv(cond)

    xiao.start()   #后应答的先start
    kailin.start()

执行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值