Шаблоны проектирования Python - очереди
Очередь - это набор объектов, которые определяют простую структуру данных в соответствии с процедурами FIFO (Fast In Fast Out) и LIFO (Last In First Out). Операции вставки и удаления называютсяenqueue и dequeue операции.
Очереди не допускают произвольный доступ к содержащимся в них объектам.
Как реализовать процедуру FIFO?
Следующая программа помогает в реализации 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()
Вывод
Вышеупомянутая программа генерирует следующий вывод -
Как реализовать процедуру LIFO?
Следующая программа помогает в реализации процедуры 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()
Вывод
Вышеупомянутая программа генерирует следующий вывод -
Что такое приоритетная очередь?
Приоритетная очередь - это структура данных контейнера, которая управляет набором записей с упорядоченными ключами, чтобы обеспечить быстрый доступ к записи с наименьшим или наибольшим ключом в указанной структуре данных.
Как реализовать приоритетную очередь?
Реализация приоритетной очереди выглядит следующим образом -
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
Вывод
Вышеупомянутая программа генерирует следующий вывод -