python 多线程优先队列Queue详解编程语言

Queue模块允许创建指定长度的队列. 下面是Queue模块的常用方法:

get():删除并返回队列中的一个项目

put(): 添加项目到队列

qsize() : 返回队列中元素的个数

empty(): 队列为空返回True否则返回False

full(): 队列已满返回True,负责返回False

#!/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" 
 

输出结果如下:

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

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/8378.html

(0)
上一篇 2021年7月18日
下一篇 2021年7月18日

相关推荐

发表回复

登录后才能评论