我需要以阻塞的方式从队列(最多N)中获取尽可能多的项目。 e.g:
queue.get(16)
最多应返回16个元素,但如果为空则阻止。
答案 0 :(得分:4)
内置没有这样的设施,所以你需要自己编码;例如,
import queue # in Python 3; Queue in Python 2
...
def getn(q, n):
result = [q.get()] # block until at least 1
try: # add more until `q` is empty or `n` items obtained
while len(result) < n:
result.append(q.get(block=False))
except queue.Empty:
pass
return result
然后为概念getn(queue, 16)
执行queue.get(16)
。
答案 1 :(得分:0)
如果队列为空,则等待3秒钟。它返回最后一个不完整的批次。
def get_batch_from_queue(q, batch_size):
item_list = []
try:
for i in range(batch_size):
item_list.append(q.get(block=True, timeout=3))
return item_list
except queue.Empty:
if(len(item_list)==0):
return None
else:
return item_list
while True:
batch = get_batch_from_queue(q, batch_size=8)
if batch == None:
break
print('len(batch)', len(batch))