当我想在Python中随机整理列表时,我这样做:
from random import shuffle
shuffle(mylist)
我将如何等效于asyncio.Queue的实例?我是否必须将队列转换为列表,将列表随机播放,然后再将其放回队列?还是有直接方法吗?
答案 0 :(得分:2)
正如您在Queue
source code中看到的那样,Queue
中的项目实际上存储在_queue
属性中。可用于通过继承扩展Queue
:
import asyncio
from random import shuffle
class MyQueue(asyncio.Queue):
def shuffle(self):
shuffle(self._queue)
async def main():
queue = MyQueue()
await queue.put(1)
await queue.put(2)
await queue.put(3)
queue.shuffle()
while not queue.empty():
item = await queue.get()
print(item)
if __name__ == '__main__':
asyncio.run(main())
如果您想改组现有的Queue
实例,则可以直接进行:
queue = asyncio.Queue()
shuffle(queue._queue)
出于明显的原因,这通常不是一个好的解决方案,但是另一方面,Queue
的实现将来会以某种方式改变的可能性使问题似乎相对较低(至少对我而言)。 / p>