首页 > 解决方案 > 从 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()

例如,如果一个项目被“取消”并且不再需要处理。

标签: pythonqueue

解决方案


如果您无法完全控制排队项目的类定义,则可以使用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]

如果项目对象不可散列,您只需通过某些键(例如增量数字)来识别它们。


推荐阅读