簡體   English   中英

如何將元素放在Python隊列的底部

[英]How to put elements on bottom of Python queue

我有一個由不同線程填充的隊列。 我有一個線程,從隊列中獲取項目,然后將它們發送到另一個目的地。 當最后一個操作失敗時,我想再次將元素放入隊列中,但要放在隊列的底部,因為我希望出隊線程將它們作為第一優先級出隊。 有沒有辦法做到這一點? 也許使用其他類而不是Queue.queue?

雙端隊列怎么樣?

雙端隊列從雙端隊列的任一側支持線程安全,內存高效的追加和彈出,並且在任一方向上的O(1)性能大致相同。

這是一個實現-基本上是Queue.put方法,其中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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM