Multithreaded Priority Queue in Python - GeeksforGeeks

31 Dec, 2020
The Queue module is primarily used to manage to process large amounts of data on multiple threads. It supports the creation of a new queue object that can take a distinct number of items.The get() and put() methods are used to add or remove items from a queue respectively. Below is the list of operations that are used to manage Queue:
get(): It is used to add an item to a queue.
put(): It is used to remove an item from a queue.
qsize(): It is used to find the number of items in a queue.
empty(): It returns a boolean value depending upon whether the queue is empty or not.
full(): It returns a boolean value depending upon whether the queue is full or not.
A Priority Queue is an extension of the queue with the following properties:
An element with high priority is dequeued before an element with low priority.
If two elements have the same priority, they are served according to their order in the queue.
Below is a code example explaining the process of creating multi-threaded priority queue:
Example:
import queueimport threadingimport time  thread_exit_Flag = 0  class sample_Thread (threading.Thread):   def __init__(self, threadID, name, q):      threading.Thread.__init__(self)      self.threadID = threadID      self.name = name      self.q = q   def run(self):      print ("initializing " + self.name)      process_data(self.name, self.q)      print ("Exiting " + self.name)  # helper function to process data        def process_data(threadName, q):   while not thread_exit_Flag:      queueLock.acquire()      if not workQueue.empty():         data = q.get()         queueLock.release()         print ("% s processing % s" % (threadName, data))      else:         queueLock.release()         time.sleep(1)  thread_list = ["Thread-1", "Thread-2", "Thread-3"]name_list = ["A", "B", "C", "D", "E"]queueLock = threading.Lock()workQueue = queue.Queue(10)threads = []threadID = 1  # Create new threadsfor thread_name in thread_list:   thread = sample_Thread(threadID, thread_name, workQueue)   thread.start()   threads.append(thread)   threadID += 1  # Fill the queuequeueLock.acquire()for items in name_list:   workQueue.put(items)  queueLock.release()  # Wait for the queue to emptywhile not workQueue.empty():   pass  # Notify threads it's time to exitthread_exit_Flag = 1  # Wait for all threads to completefor t in threads:   t.join()print ("Exit Main Thread")
Output:
initializing Thread-1
initializing Thread-2initializing Thread-3

Thread-2 processing AThread-3 processing B

Thread-3 processing C
Thread-3 processing D
Thread-2 processing E
Exiting Thread-2
Exiting Thread-1
Exiting Thread-3
Exit Main Thread
Note: The output may differ depending upon the device specifications and processing power.
Python DSA-exercises
Python-threading
Python
Write From Home
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
How to Install PIP on Windows ?
How to drop one or multiple columns in Pandas Dataframe
How To Convert Python Dictionary To JSON?
Check if element exists in list in Python
Python | Pandas dataframe.groupby()
Convert string to integer in Python
Python infinity
How to set input type date in dd-mm-yyyy format using HTML ?
Matplotlib.pyplot.title() in Python
Factory method design pattern in Java