Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Hàng đợi ưu tiên đa luồng trong Python


Mô-đun Queue cho phép bạn tạo một đối tượng hàng đợi mới có thể chứa một số lượng mục cụ thể. Có các phương thức sau để điều khiển hàng đợi:

  • get() - Loại bỏ và trả về một mục từ hàng đợi.
  • put() - Thêm mục vào hàng đợi.
  • qsize() - Trả về số mục hiện đang trong hàng đợi.
  • empty() - Trả về True nếu hàng đợi rỗng; ngược lại False.
  • full() - Trả về True nếu hàng đợi đầy; ngược lại False.

Ví dụ

#!/usr/bin/python
import Queue
import threading
import time

exitFlag = 0

class myThread(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 "Starting " + self.name
        process_data(self.name, self.q)
        print "Exiting " + self.name

def process_data(threadName, q):
    while not exitFlag:
        queueLock.acquire()
        if not workQueue.empty():
            data = q.get()
            queueLock.release()
            print "%s processing %s" % (threadName, data)
        else:
            queueLock.release()
        time.sleep(1)

threadList = ["Thread-1", "Thread-2", "Thread-3"]
nameList = ["One", "Two", "Three", "Four", "Five"]
queueLock = threading.Lock()
workQueue = Queue.Queue(10)
threads = []
threadID = 1

# Tạo luồng mới
for tName in threadList:
    thread = myThread(threadID, tName, workQueue)
    thread.start()
    threads.append(thread)
    threadID += 1

# Điền hàng đợi
queueLock.acquire()
for word in nameList:
    workQueue.put(word)
queueLock.release()

# Chờ hàng đợi rỗng
while not workQueue.empty():
    pass

# Thông báo luồng thoát
exitFlag = 1

# Chờ tất cả luồng hoàn thành
for t in threads:
    t.join()

print "Exiting Main Thread"

Khi mã trên được thực thi, nó cho kết quả sau:

Starting Thread-1
Starting Thread-2
Starting Thread-3
Thread-1 processing One
Thread-2 processing Two
Thread-3 processing Three
Thread-1 processing Four
Thread-2 processing Five
Exiting Thread-3
Exiting Thread-1
Exiting Thread-2
Exiting Main Thread