python线程间通信的几种方法,Python 线程通信

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: