python - 从 Python 队列中删除或编辑项目
问题描述
我有一个 Python 队列,我在其中像这样在线程中添加项目
import queue
import threading
_myQueue = queue.Queue()
threading.Thread(target=worker, daemon=True).start()
def worker():
while True:
item = _myQueue.get()
# Do something with this item
_myQueue.task_done()
def add_item(item):
_myQueue.put(item)
我的问题是,当我的工作线程在 _myQueue.get() 和 _myQueue.task_done() 之间执行某些操作时,我是否能够从该队列中编辑或删除项目:
item = _myQueue.get()
# Do something with this item
_myQueue.task_done()
例如,如果一个项目被“取消”并且不再需要处理。
解决方案
如果您无法完全控制排队项目的类定义,则可以使用collections.OrderedDict
而不是queue.Queue
有效地实现具有随机访问的队列:
from collections import OrderedDict
_myQueue = OrderedDict()
def worker():
while True:
item, _ = _myQueue.popitem(last=False)
# Do something with this item
def add_item(item):
_myQueue[item] = 1
def delete_item(item):
del _myQueue[item]
如果项目对象不可散列,您只需通过某些键(例如增量数字)来识别它们。