python线程间通信的几种方法,Python 线程通信
1、acquire调用Condition关联的方法。
获取()或释放()锁。
2、wait传入timeout参数。
指定线程将等待的最大秒数。
使当前线程进入条件的等待池等待通知并释放锁,直到其他线程调用条件的notify()或notify_all()方法唤醒线程。当调用wait()方法时,您可以
3、notify唤醒Condition的单个线程并通知。
被通知的线程将自动调用accquire()方法来尝试锁定。如果所有线程都在这个条件等待池中等待,其中一个线程将被唤醒,这个选择是任意的。
4、notify_all唤醒所有线程并通知。
实例
导入线程
类别帐户:
#定义构造函数
def__init__(自身,账号,余额):
self.account _no=帐户_ no
自我。_ balance=余额
self.condition=线程。条件()
#定义代表你有没有存钱的ID。
自我。_ _存款_标志=假
#取钱
defdraw(self,draw_amount):
#锁定
self.condition.acquire()
尝试:
#还没有保存
ifnotself。_ _存款_标志:
self.condition.wait()
else:
如果自己。_balance=draw_amount:
铌
sp;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基础教程
本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。