Patrones de diseño de Python: colas

Queue es una colección de objetos, que define una estructura de datos simple siguiendo los procedimientos FIFO (Fast In Fast Out) y LIFO (Last In First Out). Las operaciones de inserción y eliminación se denominanenqueue y dequeue operaciones.

Las colas no permiten el acceso aleatorio a los objetos que contienen.

¿Cómo implementar el procedimiento FIFO?

El siguiente programa ayuda en la implementación de FIFO:

import Queue

q = Queue.Queue()

#put items at the end of the queue
for x in range(4):
   q.put("item-" + str(x))

#remove items from the head of the queue
while not q.empty():
   print q.get()

Salida

El programa anterior genera la siguiente salida:

¿Cómo implementar el procedimiento LIFO?

El siguiente programa ayuda en la implementación del procedimiento LIFO:

import Queue

q = Queue.LifoQueue()

#add items at the head of the queue
for x in range(4):
   q.put("item-" + str(x))

#remove items from the head of the queue
while not q.empty():
   print q.get()

Salida

El programa anterior genera la siguiente salida:

¿Qué es una cola de prioridad?

La cola de prioridad es una estructura de datos de contenedor que administra un conjunto de registros con las claves ordenadas para proporcionar acceso rápido al registro con la clave más pequeña o más grande en la estructura de datos especificada.

¿Cómo implementar una cola de prioridad?

La implementación de la cola de prioridad es la siguiente:

import Queue

class Task(object):
   def __init__(self, priority, name):
      self.priority = priority
      self.name = name
   
   def __cmp__(self, other):
      return cmp(self.priority, other.priority)

q = Queue.PriorityQueue()

q.put( Task(100, 'a not agent task') )
q.put( Task(5, 'a highly agent task') )
q.put( Task(10, 'an important task') )

while not q.empty():
   cur_task = q.get()
	print 'process task:', cur_task.name

Salida

El programa anterior genera la siguiente salida: