首页IT科技python线程数据同步(python线程通信Condition提供的方法)

python线程数据同步(python线程通信Condition提供的方法)

时间2025-05-01 13:41:58分类IT科技浏览2796
导读:1、acquire调用Condition关联的方法。...

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基础教程

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
python sobel算子(python中Roberts算子是什么) seo快速排名技术(seo排名优化教程)