python线程通信Condition提供的方法
发布时间:2024-06-26 21:28:41

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电脑。
下一篇 python线程安全的两种情况
