有没有人知道一种pythonic方法迭代a的元素Queue.Queue 而不从队列中删除它们.我有一个生产者/消费者类型的程序,其中要处理的项目通过使用a传递Queue.Queue,我希望能够打印剩余的项目.有任何想法吗?
我有两个多处理线程,一个向队列添加项目,另一个需要遍历当前队列。我该如何进行迭代?或者,如何将当前队列转换为列表以进行迭代?
一些伪代码:
import multiprocessing as mp
thequeue = mp.Queue()
def func1():
global thequeue
while True:
item = readstream()
if item not None:
thequeue.put(item)
def func2():
while True:
for item in thequeue: # This only works for Lists, how to do this for queues?
if item == "hi":
print(item)
main():
mp.Process(target=func1).start()
mp.Process(target=func2).start()
Run Code Online (Sandbox Code Playgroud) 我正在使用python Queue存储要由线程处理的项目.从我在网上看到的,在队列中放入一个'None'对象并设置这样的线程处理将使线程停止.(它确实如此)
for item in iter(queue.get, None):
#do stuff
queue.task_done()
Run Code Online (Sandbox Code Playgroud)
现在我在网上找不到关于这种类型的for循环的很多信息.从我所看到它刚刚结束,并不会处理任何在队列中留下None对象的东西.在末尾添加queue.task_done()不起作用.
有人可以向我解释这种类型的for循环.他们是如何命名的,他们如何在一般情况下工作,或指向我一些关于它的好文档,因为我找不到任何.
我是 python 的新手,刚刚在尝试遍历队列时发现了一个奇怪的错误。
这是一个代码片段:
frontier = q.PriorityQueue()
for goal in goals:
portals = findPortals(maze)
comb_value = heuristic(startX, startY, goal[0], goal[1])
frontier.put_nowait((comb_value, heuristic(startX, startY, goal[0], goal[1]), 0, startX, startY, startX, startY))
for portal in portals:
heur = portalHeuristic(maze, startX, startY, goal[0], goal[1])
frontier.put_nowait((heur, heur, 0, startX, startY, startX, startY))
for elem in list(frontier):
print(elem)
Run Code Online (Sandbox Code Playgroud)
当试图打印出它说的元素时TypeError: 'PriorityQueue' object is not iterable。我能以某种方式解决这个问题吗?我试图在这里找到一些解决方案,但我没有真正找到我理解的任何东西......