gpt4 book ai didi

python - 如何从队列中获取元素 block ?

转载 作者:太空宇宙 更新时间:2023-11-03 11:27:29 25 4
gpt4 key购买 nike

我有一个 queue我需要从中获取 10 个条目的 block 并将它们放入列表中,然后进一步处理。下面的代码有效(在示例中,“进一步处理”只是打印列表)。

import multiprocessing

# this is an example of the actual queue
q = multiprocessing.Queue()
for i in range(22):
q.put(i)
q.put("END")

counter = 0
mylist = list()
while True:
v = q.get()
if v == "END":
# outputs the incomplete (< 10 elements) list
print(mylist)
break
else:
mylist.append(v)
counter += 1
if counter % 10 == 0:
print(mylist)
# empty the list
mylist = list()

# this outputs
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
# [20, 21]

这段代码很丑。我不知道如何改进它 - 我前段时间读过 how to use iter with a sentinel但看不出我的问题如何利用它。

是否有更好的(= 更优雅/pythonic)方法来解决问题?

最佳答案

您可以使用 iter 两次:iter(q.get, 'END') 返回一个迭代器,它可以迭代队列中的值直到 ' END'q.get() 返回。

然后你可以使用the grouper recipe

iter(lambda: list(IT.islice(iterator, 10)), [])

将迭代器分组为 10 个项目的 block 。

import itertools as IT
import multiprocessing as mp

q = mp.Queue()
for i in range(22):
q.put(i)
q.put("END")

iterator = iter(q.get, 'END')
for chunk in iter(lambda: list(IT.islice(iterator, 10)), []):
print(chunk)

产量

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[20, 21]

关于python - 如何从队列中获取元素 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31393276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com