Queue 队列对象 实现多线程
使用Queue标准库,队列是线程间最常用的交换数据形式
import Queue
- 初始化
- class Queue.Queue(maxsize) FIFO先进先出
- 包中常用的方法:
Queue.qsize() # 返回队列的大小
Queue.empty() # 如果队列为空,返回True,反之返回False
Queue.full() # 如果队列满了,返回True,反之返回False
# Queue.full 与 maxsize 大小对应
Queue.get([block[, timeout]]) # 获取队列,timeout等待时间
Queue.task_done() # 当queue使用get方法时,队列数目不会减1,所以后面要加上task_done使数目减1。(注:put方法会使队列加1)
# task_done()一定要放在所有put后面
Queue.join() # 把子线程加入到主线程堵塞(在本文末尾详细演示)
- 创建一个“队列”对象
import Queue
myqueue = Queue.Queue(maxsize = 10)
将一个值放入队列中
myqueue.put(10)
将一个值从队列中取出
myqueue.get()
多线程编程中,用法演示:
self.url_queue = .... #省略
t = threading.Thread(target=self.save_content)
t.setDaemon(True) # 把子线程设置为守护线程,该线程不重要,主线程结束,子线程立即结束。(如果想让主线程等待子线程,后面要使用join方法,让主线程等待堵塞)
t.start()
for q in self.url_queue:
q.join() #让主线程等待堵塞,等待队列的任务