Các mẫu thiết kế Python - Hàng đợi

Hàng đợi là một tập hợp các đối tượng, xác định một cấu trúc dữ liệu đơn giản theo thủ tục FIFO (Fast In Fast Out) và LIFO (Last In First Out). Các thao tác chèn và xóa được gọi làenqueuedequeue các hoạt động.

Hàng đợi không cho phép truy cập ngẫu nhiên vào các đối tượng mà chúng chứa.

Làm thế nào để thực hiện thủ tục FIFO?

Chương trình sau đây giúp thực hiện 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()

Đầu ra

Chương trình trên tạo ra kết quả sau:

Làm thế nào để thực hiện thủ tục LIFO?

Chương trình sau giúp thực hiện quy trình 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()

Đầu ra

Chương trình trên tạo ra kết quả sau:

Hàng đợi ưu tiên là gì?

Hàng đợi ưu tiên là cấu trúc dữ liệu vùng chứa quản lý một tập hợp các bản ghi với các khóa được sắp xếp để cung cấp quyền truy cập nhanh vào bản ghi có khóa nhỏ nhất hoặc lớn nhất trong cấu trúc dữ liệu được chỉ định.

Làm thế nào để triển khai một hàng đợi ưu tiên?

Việc thực hiện hàng đợi ưu tiên như sau:

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

Đầu ra

Chương trình trên tạo ra kết quả sau: