Home »
Python »
Python Reference »
Python Condition Class
Python Condition notify_all() Method with Example
Python Condition.notify_all() Method: In this tutorial, we will learn about the notify_all() method of Condition class in Python with its usage, syntax, and examples.
By Hritika Rajput Last updated : April 25, 2023
Python Condition.notify_all() Method
The Condition.notify_all() is an inbuilt method of the Condition class of the threading module. It is used to wake all the threads that are waiting on a condition variable.
Read about Producer-Consumer here: Condition.acquire() Method
Module
The following module is required to use notify_all() method:
import threading
Class
The following class is required to use notify_all() method:
from threading import Condition
Syntax
The following is the syntax of notify_all() method:
notify_all()
Parameter(s)
The following are the parameter(s):
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.
Example of Condition.notify_all() Method in Python
# 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