Cola de prioridad multiproceso en Python

El módulo Queue se utiliza principalmente para gestionar el procesamiento de grandes cantidades de datos en varios subprocesos. Admite la creación de un nuevo objeto de cola que puede tomar una cantidad distinta de elementos.
Los métodos get() y put()se utilizan para agregar o eliminar elementos de una cola, respectivamente. A continuación se muestra la lista de operaciones que se utilizan para administrar la cola:

  • get(): se utiliza para agregar un elemento a una cola.
  • put(): se utiliza para eliminar un elemento de una cola.
  • qsize(): se utiliza para encontrar el número de elementos en una cola.
  • empty(): Devuelve un valor booleano dependiendo de si la cola está vacía o no.
  • full(): Devuelve un valor booleano dependiendo de si la cola está llena o no.

Una cola de prioridad es una extensión de la cola con las siguientes propiedades:

  • Un elemento con prioridad alta se elimina de la cola antes que un elemento con prioridad baja.
  • Si dos elementos tienen la misma prioridad, se sirven según su orden en la cola.

A continuación se muestra un ejemplo de código que explica el proceso de creación de una cola de prioridad de subprocesos múltiples:

Ejemplo:

import queue
import threading
import 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 threads
for thread_name in thread_list:
   thread = sample_Thread(threadID, thread_name, workQueue)
   thread.start()
   threads.append(thread)
   threadID += 1
  
# Fill the queue
queueLock.acquire()
for items in name_list:
   workQueue.put(items)
  
queueLock.release()
  
# Wait for the queue to empty
while not workQueue.empty():
   pass
  
# Notify threads it's time to exit
thread_exit_Flag = 1
  
# Wait for all threads to complete
for t in threads:
   t.join()
print ("Exit Main Thread")


Producción:

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

Nota: La salida puede diferir según las especificaciones del dispositivo y la potencia de procesamiento.

Publicación traducida automáticamente

Artículo escrito por RajuKumar19 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *