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àenqueue và dequeue 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: