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

 

posted @ 2018-10-30 15:28  paulwang2018  阅读(224)  评论(0编辑  收藏  举报