pgi*_*mon 33 python queue producer-consumer
有没有人知道一种pythonic方法迭代a的元素Queue.Queue
而不从队列中删除它们.我有一个生产者/消费者类型的程序,其中要处理的项目通过使用a传递Queue.Queue
,我希望能够打印剩余的项目.有任何想法吗?
Ray*_*ger 40
您可以循环访问基础数据存储的副本:
for elem in list(q.queue)
Run Code Online (Sandbox Code Playgroud)
虽然这绕过了Queue对象的锁,但是列表副本是一个原子操作,它应该可以正常工作.
如果要保留锁定,为什么不将所有任务从队列中取出,进行列表复制,然后将其放回原处.
mycopy = []
while True:
try:
elem = q.get(block=False)
except Empty:
break
else:
mycopy.append(elem)
for elem in mycopy:
q.put(elem)
for elem in mycopy:
# do something with the elements
Run Code Online (Sandbox Code Playgroud)
Ome*_*gan 12
列出队列元素而不使用它们:
>>> from Queue import Queue
>>> q = Queue()
>>> q.put(1)
>>> q.put(2)
>>> q.put(3)
>>> print list(q.queue)
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
操作后,您仍然可以处理它们:
>>> q.get()
1
>>> print list(q.queue)
[2, 3]
Run Code Online (Sandbox Code Playgroud)
您可以通过子类queue.Queue
来以线程安全的方式实现此目的:
import queue
class ImprovedQueue(queue.Queue):
def to_list(self):
"""
Returns a copy of all items in the queue without removing them.
"""
with self.mutex:
return list(self.queue)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
41845 次 |
最近记录: |