1、acquire调用Condition关联的方法。
Lock的acquire()或release()。
2、wait传入timeout参数。
指定该线程最多等待多少秒。
导致当前线程进入Condition的等待池等待通知并释放锁,直到其他线程调用该Condition的notify()或者notify_all()方法来唤醒该线程。在调用该wait()方法时可以
3、notify唤醒Condition的单个线程并通知。
收到通知的线程会自动调用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") #将标识账户已有存款的标识改成False 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基础教程