我正在开发一个使用asyncio.Queue的程序。 最好能够清除队列,访问所有排队的元素而不删除它们,并在队列中的“索引1”处插入元素
我知道,这听起来像是collections.deque,但我依赖于异步/等待代码(即blocking get)
我的做法:
clear
:从队列中删除所有元素,直到其为空李>get_all
:删除元素,添加到列表,再次排队元素,重复qsize()
次。返回列表李>appendleft
:队列元素。然后从队列中删除qsize() - 1
元素并将其附加到队列中,直到class BlockingDeque(asyncio.Queue):
def clear(self):
while not self.empty():
self.get_nowait()
self.task_done()
def get_all(self):
all = []
for i in range(self.qsize()):
item = self.get_nowait()
self.task_done()
self.put_nowait(item)
all.append(item)
return all
async def appendleft(self, item):
await self.put(item)
for _ in range(self.qsize() - 1):
item = self.get_nowait()
self.task_done()
self.put_nowait(item)
我还遇到了this solution,它访问asyncio.Queue().__dict__['_queue']
class BlockingDeque(asyncio.Queue):
def clear(self):
self._queue.clear()
def get_all(self):
return self._queue.copy()
def appendleft(self, x):
self._queue.appendleft(x)
哪种方法更可取?有更好的方法吗
目前没有回答
相关问题 更多 >
编程相关推荐