1.Queue的用法
通常配合threading使用,创建一个队列,多个线程可以从队列中提取任务,返回输入任务
那么具体是怎么配送threading模块使用的呢?
举个例子,比如你要下载一个文件,可是你发现对方给你限制了你的下载速度,每个文件只准10kb的下载,这时候你可以将下载文件所有的请求丢到一个队列里面 Queue.put()
(假设1000个请求),这个队列就是Queue,然后你设置100个线程,每个线程都可以直接通过Queue.get()
来拿到属于自己的任务,最后使用Queue.task_done()
告诉队列,这个任务我完成了。这样你就相当于拥有了下载100个文件的速度来下载这一个文件。
from queue import Queue
q = Queue()#可以设置maxsize设置最多队列长度
方法 | 作用 |
---|---|
Queue.qsize() | 返回队列的大小 |
Queue.empty() | 如果队列为空,返回True,反之False |
Queue.full() | 与empty相反,返回True,反之False |
Queue.get() | 获取队列 ,get put都有timeout参数,表示等待时间 |
Queue.get_nowait() | 非阻塞获取队列 |
Queue.put() | 写入队列 |
Queue.put_nowait() | 非阻塞写入队列 |
Queue.task_done() | 告诉队列该任务已经处理完毕 |
Queue.join() | 等到队列为空,再执行别的操作 |
具体使用
先看看这个代码
from queue import Queue
import threading
import time
start_time = time.time()
q = Queue()
for i in range(1,11): #为q队列添加10个数字
q.put(i)
def f1(): #假设是一个需要1s时间才能完成的程序
while True: #循环,使线程一直从q中获取数据
num = q.get()
print("现在处理队列中的", num)