当前位置: 首页 > 图灵资讯 > 行业资讯> python线程通信Condition提供的方法

python线程通信Condition提供的方法

来源:图灵python
时间: 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电脑。