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