1 Thread Based Parallelism - Thread Synchronization With a Condition 2 3 from threading import Thread, Condition 4 import time 5 6 items = [] 7 condition = Condition() 8 9 class consumer(Thread): 10 def __init__(self): 11 Thread.__init__(self) 12 13 def consume(self): 14 global condition 15 global items 16 17 condition.acquire() 18 if len(items) == 0: 19 condition.wait() 20 print("Consumer notify : no item to consume") 21 items.pop() 22 print("Consumer notify : consumed 1 item") 23 print("Consumer notify : items to consume are : " + str(len(items))) 24 if len(items) == 0: 25 print("Consumer notify : no items to consume in future") 26 condition.notify() 27 condition.release() 28 29 def run(self): 30 for i in range(0, 10): 31 time.sleep(2) 32 self.consume() 33 34 class producer(Thread): 35 def __init__(self): 36 Thread.__init__(self) 37 38 def produce(self): 39 global condition 40 global items 41 42 condition.acquire() 43 if len(items) == 4: 44 condition.wait() 45 print("Producer notify : items producted are " + str(len(items))) 46 print("Producer notify : stop the production!!") 47 items.append(1) 48 print("Producer notify : total items producted " + str(len(items))) 49 condition.notify() 50 condition.release() 51 52 def run(self): 53 for i in range(0, 10): 54 time.sleep(1) 55 self.produce() 56 57 if __name__ == "__main__": 58 producer = producer() 59 consumer = consumer() 60 61 producer.start() 62 consumer.start() 63 64 producer.join() 65 consumer.join() 66 67 Output, 68 Producer notify : total items producted 1 69 Consumer notify : consumed 1 item 70 Consumer notify : items to consume are : 0 71 Consumer notify : no items to consume in future 72 Producer notify : total items producted 1 73 Producer notify : total items producted 2 74 Consumer notify : consumed 1 item 75 Consumer notify : items to consume are : 1 76 Producer notify : total items producted 2 77 Producer notify : total items producted 3 78 Consumer notify : consumed 1 item 79 Consumer notify : items to consume are : 2 80 Producer notify : total items producted 3 81 Producer notify : total items producted 4 82 Consumer notify : consumed 1 item 83 Consumer notify : items to consume are : 3 84 Producer notify : total items producted 4 85 Consumer notify : consumed 1 item 86 Consumer notify : items to consume are : 3 87 Producer notify : items producted are 3 88 Producer notify : stop the production!! 89 Producer notify : total items producted 4 90 Consumer notify : consumed 1 item 91 Consumer notify : items to consume are : 3 92 Producer notify : items producted are 3 93 Producer notify : stop the production!! 94 Producer notify : total items producted 4 95 Consumer notify : consumed 1 item 96 Consumer notify : items to consume are : 3 97 Consumer notify : consumed 1 item 98 Consumer notify : items to consume are : 2 99 Consumer notify : consumed 1 item 100 Consumer notify : items to consume are : 1 101 Consumer notify : consumed 1 item 102 Consumer notify : items to consume are : 0 103 Consumer notify : no items to consume in future