Computer >> Máy Tính >  >> Lập trình >> Python

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

Mô-đun Hàng đợi 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 pháp sau để kiểm soát Hàng đợi -

  • get () - Hàm get () xóa và trả về một mục khỏi hàng đợi.
  • put () - Đặt thêm vật phẩm vào hàng đợi.
  • qsize () - Qsize () trả về số lượng mục hiện đang có trong hàng đợi.
  • trống () - Giá trị rỗng () trả về giá trị True nếu hàng đợi trống; ngược lại, Sai.
  • full () - full () trả về True nếu hàng đợi đầy; ngược lại, Sai.

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
# Create new threads
for tName in threadList:
thread = myThread(threadID, tName, workQueue)
thread.start()
threads.append(thread)
threadID += 1
# Fill the queue
queueLock.acquire()
for word in nameList:
   workQueue.put(word)
queueLock.release()
# Wait for queue to empty
while not workQueue.empty():
pass
# Notify threads it's time to exit
exitFlag = 1
# Wait for all threads to complete
for t in threads:
   t.join()
print "Exiting Main Thread"

Khi đoạn mã trên được thực thi, nó tạo ra 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