|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- 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 ("开启线程:" + self.name)
- process_data(self.name, self.q)
- print ("退出线程:" + 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
- # 创建新线程
- for tName in threadList:
- thread = myThread(threadID, tName, workQueue)
- thread.start()
- threads.append(thread)
- threadID += 1
- # 填充队列
- queueLock.acquire()
- for word in nameList:
- workQueue.put(word)
- queueLock.release()
- # 等待队列清空
- while not workQueue.empty():
- pass
- # 通知线程是时候退出
- exitFlag = 1
- # 等待所有线程完成
- for t in threads:
- t.join()
- print ("退出主线程")
复制代码
其中,等待队列清空的while语句,这样的写法,如果队列为空,岂不是死循环了吗,不理解这样的写法,希望大神可以解惑。
肯定啊,啥是多线程?? 你以为程序堵塞在这里,其他的不运行了?其他线程肯定在消耗队列任务呀
|
|