notify_all()_Python条件类| 带示例的notify_all()方法

Python的线程模块Condition类提供了notify_all()方法,用于唤醒所有在条件变量上等待的线程。这个方法在多线程编程中用于通知所有等待的消费者线程可以继续执行。
摘要由CSDN通过智能技术生成

notify_all()

Python Condition.notify_all()方法 (Python Condition.notify_all() Method)

notify_all() is an inbuilt method of the Condition class of the threading module in Python.

notify_all()是Python中线程模块的Condition类的内置方法。

Condition class implements condition variable objects. A condition variable allows one or more threads to wait until they are notified by another thread. This method is used to wake all the threads which are waiting on a condition variable.

条件类实现条件变量对象 。 条件变量允许一个或多个线程等待,直到被另一个线程通知为止。 此方法用于唤醒所有等待条件变量的线程。

Read about Producer-Consumer here: Condition.acquire() Method

在这里阅读有关Producer-Consumer的信息: Condition.acquire()方法

Module:

模块:

    from threading import Condition

Syntax:

句法:

    notify_all()

Parameter(s):

参数:

  • None

    没有

Return value:

返回值:

The return type of this method is <class 'NoneType'>. The method does not return anything. It notifies all the threads that are waiting on the condition.

此方法的返回类型为<class'NoneType'> 。 该方法不返回任何内容。 它通知所有正在等待条件的线程。

Example:

例:

# Python program to explain the
# use of acquire() method for Condition object

import threading
import time
import random

class subclass:
  # Initialising the shared resources
  def __init__(self):
    self.x = []
  
  # Add an item for the producer
  def produce_item(self, x_item):
    print("Producer adding an item to the list")
    self.x.append(x_item)
    
  # Consume an item for the consumer
  def consume_item(self):
    print("Consuming from the list")
    consumed_item = self.x[0]
    print("Consumed item: ", consumed_item)
    print("Consumed by:", str(threading.current_thread().getName()))
    self.x.remove(consumed_item)

def producer(subclass_obj, condition_obj):
    # Selecting a random number from the 1 to 4
    r = random.randint(1,4)
    print("Random number selected was:", r)
    
    # Creting r number of items by the producer
    for i in range(1, r):
      print("Producing an item, time it will take(seconds): " + str(i))
      time.sleep(i)
      
      print("Producer acquiring the lock")
      (condition_obj.acquire())
      try:
        # Produce an item
        subclass_obj.produce_item(i)
        # Notify all consumers that an item  has been produced
        condition_obj.notify_all()
      finally:
        # Releasing the lock after producing
        condition_obj.release()
      
def consumer(subclass_obj, condition_obj):
    condition_obj.acquire()
    while True:
      try:
        # Consume the item 
        subclass_obj.consume_item()
      except:
        print("No item to consume, list empty")
        print("Waiting for 10 seconds")
        # wait with a maximum timeout of 10 sec
        value = condition_obj.wait(10)

        if value:
          print("Item produced notified")
          continue
        else:
          print("Waiting timeout")
          break
        
    # Releasig the lock after consuming
    condition_obj.release()
    
if __name__=='__main__':
    
  # Initialising a condition class object
  condition_obj = threading.Condition()
  # subclass object
  subclass_obj = subclass()
  
  # Producer thread
  pro = threading.Thread(target=producer, args=(subclass_obj,condition_obj,))
  pro.start()
  
  # Consumer1 thread
  con1 = threading.Thread(target=consumer, args=(subclass_obj,condition_obj,))
  con1.start()

  # Consumer2 thread
  con2 = threading.Thread(target=consumer, args=(subclass_obj,condition_obj,))
  con2.start()

  pro.join()
  con1.join()
  con2.join()
  print("Producer Consumer code executed")

Output:

输出:

Random number selected was: 4
Producing an item, time it will take(seconds): 1
Consuming from the list
No item to consume, list empty
Waiting for 10 seconds
Consuming from the list
No item to consume, list empty
Waiting for 10 seconds
Producer acquiring the lock
Producer adding an item to the list
Item produced notified
Consuming from the list
Consumed item:  1
Consumed by: Thread-2
Consuming from the list
No item to consume, list empty
Waiting for 10 seconds
Item produced notified
Consuming from the list
No item to consume, list empty
Waiting for 10 seconds
Producing an item, time it will take(seconds): 2
Producer acquiring the lock
Producer adding an item to the list
Item produced notified
Consuming from the list
Consumed item:  2
Consumed by: Thread-3
Consuming from the list
No item to consume, list empty
Waiting for 10 seconds
Producing an item, time it will take(seconds): 3Item produced notified

Consuming from the list
No item to consume, list empty
Waiting for 10 seconds
Producer acquiring the lock
Producer adding an item to the list
Item produced notified
Consuming from the list
Consumed item:  3
Consumed by: Thread-3
Consuming from the list
No item to consume, list empty
Waiting for 10 seconds
Item produced notified
Consuming from the list
No item to consume, list empty
Waiting for 10 seconds
Waiting timeout
Waiting timeout
Producer Consumer code executed


翻译自: https://www.includehelp.com/python/condition-notify_all-method-with-example.aspx

notify_all()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值