可以使用qsize() 知道队列的大小
- 我们如何知道队列的最大大小?或者换句话说,当条件
queue.full()将返回True? 为什么
q.put(i)的结果总是None而q.get(i)是产生相应的值?from queue import Queue q = Queue() print("------Queue info when putting -----") for i in range(5): print("---Loop---- :",i) print("queue empty : ", q.empty()) print("put : ",q.put(i)) print("queue size : ", q.qsize()) print("queue full : ", q.full()) print("------Queue info when getting -----") for i in range(5): print("---Loop---- :",i) print("get : ",q.get(i)) print("task done : ",q.task_done()) print("queue empty : ", q.empty())
输出如下:
------Queue info when putting -----
---Loop---- : 0
queue empty : True
put : None
queue size : 1
queue full : False
(loop continues for 5 times)
------Queue info when getting -----
---Loop---- : 0
get : 0
task done : None
queue empty : False
(loop continues for 5 times)
请您参考如下方法:
回答您的第一个问题:出于所有意图和目的,队列的最大大小是无限的。原因是,如果您尝试将某些东西放入已满的队列中,它会等到空位打开后再将下一个项目放入队列中。这是假设您使用最大大小参数初始化队列。你可以在这里看到:class queue.Queue(maxsize) 你可以传递一个 maxsize 参数。根据docs : “如果 maxsize 小于或等于零,则队列大小是无限的。”
这就引出了第二个问题:put() 方法将项目放入队列,如果成功则返回None。从文档中,
put(item[, block[, timeout]])If timeout is a positive number, it blocks at most timeout seconds and raises the Full exception if no free slot was available within that time. Otherwise (block is false), put an item on the queue if a free slot is immediately available, else raise the Full exception (timeout is ignored in that case).
因此,当您将某些内容放入队列时,它将始终返回 None 除非引发异常。另一方面,get() 返回它获取的项目。再次来自文档:
get([block[, timeout]]): Remove and return an item from the queue.
