Python 什么';在线程队列上执行多个操作的正确方法是什么?
我需要对queue.queue执行一组操作,特别是遍历它并打包重复的连续元素。我还想确保在这组操作期间只有一个线程访问队列。我看到队列对象有一个互斥锁,但我也假设它是由队列在自己的操作期间执行锁定的。拥有另一个互斥锁并不保证队列在此期间不会被另一个线程访问,除非我组织代码来锁定第二个互斥锁Python 什么';在线程队列上执行多个操作的正确方法是什么?,python,multithreading,python-3.x,queue,Python,Multithreading,Python 3.x,Queue,我需要对queue.queue执行一组操作,特别是遍历它并打包重复的连续元素。我还想确保在这组操作期间只有一个线程访问队列。我看到队列对象有一个互斥锁,但我也假设它是由队列在自己的操作期间执行锁定的。拥有另一个互斥锁并不保证队列在此期间不会被另一个线程访问,除非我组织代码来锁定第二个互斥锁 为了安全地执行这些操作,是否有我不知道的技巧?为此使用队列对象的互斥体。它正好用于同步对底层队列的修改 也许可以创建子类并添加一个方法(如中的方法)来打包self.queue中连续的重复项 或者,我认为更好的
为了安全地执行这些操作,是否有我不知道的技巧?为此使用队列对象的互斥体。它正好用于同步对底层队列的修改 也许可以创建子类并添加一个方法(如中的方法)来打包
self.queue
中连续的重复项
或者,我认为更好的方法是,对queue.queue进行子类化并重写\u put
,以便在将连续的重复项添加到队列中时立即处理它们。\u put
的调用已经受到互斥保护(而\u put
、\u get
等是如何实现LifoQueue等标准子类的):
使用BlockingQueue实现。它们具有嵌入式同步。
class PackedQueue(queue.Queue):
def _put(self, item):
if item != self.queue[-1]:
self.queue.append(item)