1、acquire调用Condition关联的方法。
Lock的acquire()或release()。
2、wait输入timeout参数。
指定该线程最多等待多少秒。
导致当前线程进入Condition等待池等待通知并释放锁,直到其他线程调用Condition的notify()或notify_all()方法唤醒线程。在调用wait()方法时,可以
3、唤醒Condition的单线程并通知notify。
接到通知的线程会自动调用accquire()尝试锁定。如果所有线程都在Condition等待池中等待,则会选择唤醒其中一个线程,选择是任意的。
4、notify_all唤醒所有线程并通知。
实例
importthreading classAccount: #构造函数的定义 def__init__(self,account_no,balance): self.account_no=account_no self._balance=balance self.condition=threading.Condition() #定义代表是否存钱的标志 self.__deposit_flag=False #取钱 defdraw(self,draw_amount): #加锁 self.condition.acquire() try: #还没存钱 ifnotself.__deposit_flag: self.condition.wait() else: ifself._balance>=draw_amount: self._balance=self._balance-draw_amount print(threading.current_thread().getName()+"取钱成功,账户余额为:"+str(self._balance)+"\n") else: print(threading.current_thread().getName()+"取钱失败\n") #将已有存款的标识转换为Falsee self.__deposit_flag=False #唤醒其他等待现车线程 self.condition.notify_all() finally: #释放锁 self.condition.release() #存钱 defdeposit(self,deposit_amount): #加锁 self.condition.acquire() try: #若已存款,则等待取款 ifself.__deposit_flag: self.condition.wait() else: self._balance=self._balance+deposit_amount print(threading.current_thread().getName()+"存款成功,存款金额为:"+str(deposit_amount)+"\n") #将存款标识改为存款标识 self.__deposit_flag=True #唤醒其它线程 self.condition.notify_all() finally: #释放锁 self.condition.release() defdraw_many(account,draw_amount,max): foriinrange(max): account.draw(draw_amount) defdeposit_many(account,deposit_amount,max): foriinrange(max): account.deposit(deposit_amount) #创建帐户 account=Account("账户一",0) #创建并启动取钱线程 draw_1=threading.Thread(name='取款者一',target=draw_many,args=(account,200,50)) draw_1.start() draw_2=threading.Thread(name='二'取钱者;,target=draw_many,args=(account,200,50)) draw_2.start() #创建并启动存款线程 deposit_1=threading.Thread(name='存钱者一',target=deposit_many,args=(account,200,50)) deposit_1.start() deposit_2=threading.Thread(name='存款人二',target=deposit_many,args=(account,200,50)) deposit_2.start() draw_1.join() draw_2.join() deposit_1.join() deposit_2.join()
以上是python线程通信Condition提供的方法,希望对大家有所帮助。更多Python学习指导:python基础教程
本文教程操作环境:windows7系统Python 3.9.1,DELL G3电脑。