【问题标题】:How to put elements on bottom of Python queue如何将元素放在Python队列的底部
【发布时间】:2016-02-12 12:49:13
【问题描述】:

我有一个由不同线程填充的队列。 我有一个线程,我从队列中获取项目并将它们发送到另一个目的地。当最后一个操作失败时,我想再次将元素放入队列中,但放在队列的底部,因为我希望出队线程将它们作为第一优先级出队。有没有办法做到这一点?也许使用其他类而不是 Queue.queue?

【问题讨论】:

    标签: python multithreading queue


    【解决方案1】:

    deque 怎么样?

    双端队列支持线程安全、内存高效的从双端队列的任一侧追加和弹出,在任一方向上的 O(1) 性能大致相同。

    【讨论】:

      【解决方案2】:

      这是一个实现——它基本上是 Queue.put method 与 self._put(item) 替换为 self.queue.appendleft(item)

      from Queue import Queue
      
      class MyQueue(Queue):
          def putleft(self, item, block=True, timeout=None):
              self.not_full.acquire()
              try:
                  if self.maxsize > 0:
                      if not block:
                          if self._qsize() == self.maxsize:
                              raise Full
                      elif timeout is None:
                          while self._qsize() == self.maxsize:
                              self.not_full.wait()
                      elif timeout < 0:
                          raise ValueError("'timeout' must be a non-negative number")
                      else:
                          endtime = _time() + timeout
                          while self._qsize() == self.maxsize:
                              remaining = endtime - _time()
                              if remaining <= 0.0:
                                  raise Full
                              self.not_full.wait(remaining)
                  self.queue.appendleft(item)
                  self.unfinished_tasks += 1
                  self.not_empty.notify()
              finally:
                  self.not_full.release()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-22
        • 1970-01-01
        • 2016-02-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多