Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么';在线程队列上执行多个操作的正确方法是什么?_Python_Multithreading_Python 3.x_Queue - Fatal编程技术网

Python 什么';在线程队列上执行多个操作的正确方法是什么?

Python 什么';在线程队列上执行多个操作的正确方法是什么?,python,multithreading,python-3.x,queue,Python,Multithreading,Python 3.x,Queue,我需要对queue.queue执行一组操作,特别是遍历它并打包重复的连续元素。我还想确保在这组操作期间只有一个线程访问队列。我看到队列对象有一个互斥锁,但我也假设它是由队列在自己的操作期间执行锁定的。拥有另一个互斥锁并不保证队列在此期间不会被另一个线程访问,除非我组织代码来锁定第二个互斥锁 为了安全地执行这些操作,是否有我不知道的技巧?为此使用队列对象的互斥体。它正好用于同步对底层队列的修改 也许可以创建子类并添加一个方法(如中的方法)来打包self.queue中连续的重复项 或者,我认为更好的

我需要对queue.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)