Her*_*arn 1 python queue multithreading
队列的大小可以通过使用 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())
Run Code Online (Sandbox Code Playgroud)------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)
Run Code Online (Sandbox Code Playgroud)
查看Queue的实现源码:https : //hg.python.org/cpython/file/3.5/Lib/queue.py
从 init 函数可以看出,'queue.maxsize' 是一个成员变量,应该包含队列的最大大小。
因此,您可以执行以下操作:
from queue import Queue
my_queue = Queue(maxsize=10)
max_size = queue.maxsize
Run Code Online (Sandbox Code Playgroud)
回答您的第一个问题:就所有意图和目的而言,队列的最大大小是无限的。原因是,如果您尝试将某些东西放入已满的队列中,它将等待直到某个插槽打开后才将下一项放入队列中。假设您使用最大大小参数初始化队列。您可以在此处看到:class queue.Queue(maxsize)您可以传递maxsize参数。根据文档:“如果maxsize小于或等于零,则队列大小为无限。”
这引出了第二个问题:该put()方法将项目放入队列中,None如果成功则返回。从文档中
put(item[, block[, timeout]])如果超时为正数,则在最多超时秒内阻塞,并在该时间内没有可用插槽时引发Full异常。否则(块为false),如果有空闲插槽立即可用,则将项目放在队列中,否则引发Full异常(在这种情况下,超时将被忽略)。
因此,将某些内容放入队列时,None除非引发异常,否则它将始终返回。get()另一方面,返回得到的项目。再次从文档中:
get([block[, timeout]]):从队列中删除并返回一个项目。
| 归档时间: |
|
| 查看次数: |
7605 次 |
| 最近记录: |