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')