Как видно из Queue
исходного кода , элементы в 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
изменится в будущем таким образом, что проблема будет казаться относительно низкой (по крайней мере, мне).