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ề
Truenếu hàng đợi rỗng; ngược lạiFalse. - full() - Trả về
Truenếu hàng đợi đầy; ngược lạiFalse.
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