多处理队列批处理最多可达N个元素

时间:2017-01-06 03:46:27

标签: python queue

我需要以阻塞的方式从队列(最多N)中获取尽可能多的项目。 e.g:

queue.get(16)

最多应返回16个元素,但如果为空则阻止。

2 个答案:

答案 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))