如何在Python中随机随机播放asyncio.Queue?

时间:2019-01-14 03:30:21

标签: queue python-asyncio shuffle

当我想在Python中随机整理列表时,我这样做:

from random import shuffle
shuffle(mylist)

我将如何等效于asyncio.Queue的实例?我是否必须将队列转换为列表,将列表随机播放,然后再将其放回队列?还是有直接方法吗?

1 个答案:

答案 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>