python队列 和线程
import queue #设置队列上限maxsize=10 q=queue.Queue(maxsize=10) #往队列中加10个数据 for i in range(100): if q.qsize() >= 10: #存放的数据达到上限maxsize,插入会导致阻塞 break else: q.put(i) # 从队列中取值 while not q.empty(): n = q.get() print("本次取出数据: %s" %n)
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) users=['user1','user2','user3'] usernames=['name1','name2','name3','name4','name5','name6','name7','name8','name9','name10'] queueLock=threading.Lock() workQueue=queue.Queue(10) threads=[] threadID=1 #创建新线程 for tName in users: thread=myThread(threadID,tName,workQueue) thread.start() threads.append(thread) threadID+=1 # 填充队列 queueLock.acquire() for word in usernames: workQueue.put(word) queueLock.release() # 等待队列清空 while not workQueue.empty(): pass # 通知线程是时候退出 exitFlag=1 #等待所有线程完成 for t in threads: t.join() print('Exiting Main Thread')