有沒有人知道pythonic迭代方式的Queue.Queue
而不是從隊列中刪除它們。我有一個生產者/消費者類型的程序,其中要處理的項目通過使用Queue.Queue
來傳遞,我希望能夠打印剩餘項目。有任何想法嗎?如何迭代Python中的Queue.Queue項目?
16
A
回答
25
你也可以遍歷底層數據存儲的副本:
for elem in list(q.queue)
Eventhough這種繞過鎖隊列對象,該列表的副本是一個原子操作,它應該工作了罰款。
如果你想保留鎖,爲什麼不把所有任務拉出隊列,讓你的列表複製,然後把它們放回去。
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
2
你也可以繼承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)
0
上市隊列中的元素,而無需耗費他們:
>>> from Queue import Queue
>>> q = Queue()
>>> q.put(1)
>>> q.put(2)
>>> q.put(3)
>>> print list(q.queue)
[1, 2, 3]
操作後,你就會得到還在對其進行處理:
>>> q.get()
1
>>> print list(q.queue)
[2, 3]
相關問題
- 1. 如何迭代RecyclerView項目
- 2. 如何迭代Thymeleaf中的X項目?
- 3. Python:迭代插入項目的字典
- 4. Python-XMPP - 迭代智商節項目
- 5. 快速迭代python中的迭代(不是列表)的前n項目
- 6. 如何迭代活動項目
- 7. 如何thorugh JArray項目迭代列表
- 8. 如何通過嵌套項目迭代
- 9. 如何將迭代器中的項目T分組爲迭代器[Seq [T]]
- 10. 剃刀:迭代項目和子項目
- 11. 跳過項目螞蟻迭代項目
- 12. 如何迭代QListWidget項目並處理每個項目?
- 13. Python:從迭代中刪除重複的項目
- 14. 用於在Python中迭代少量項目的最佳風格?
- 15. 迭代SortedDict中的項目片段?
- 16. 迭代ListView中的每個項目 - Android
- 17. 迭代Boost Property Tree中的項目
- 18. 對項目中枚舉類的迭代
- 19. 如何通過Python中的已排序迭代進行迭代
- 20. 如何迭代Python中的defaultdict(列表)?
- 21. 我如何加快Python中的迭代?
- 22. 如何迭代python中的文件
- 23. 如何迭代python中的字符串?
- 24. 如何迭代python中的json數據?
- 25. 如何迭代Python中的字符串?
- 26. 如何正確迭代Python中的re.sub()
- 27. 如何迭代Python中的「gslist」?
- 28. 迭代通過IPersistentCollection項目
- 29. DOJO選擇迭代項目
- 30. 項目註冊迭代器
'列表中的元素(q.queue)'導致'TypeError:'隊列'對象在Python 3中不可迭代'。也許我做錯了什麼? –
@ macmadness86它看起來像另一個圖層,「q」是代碼對象,具有包含隊列對象的「隊列」屬性。試試這個:''列表中的元素(q.queue.queue)''。 –
羅傑。將遵守。謝謝你的提示。 (此消息計劃刪除) –