queue - 如何在 Python 中随机打乱 asyncio.Queue?
问题描述
当我想在 Python 中随机打乱一个列表时,我会这样做:
from random import shuffle
shuffle(mylist)
我将如何做相当于asyncio.Queue的实例?我是否必须将队列转换为列表,随机播放列表,然后将它们放回队列中?或者有没有办法直接做?
解决方案
正如您在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
,未来实现的可能性会以某种方式使其问题看起来相对较低(至少对我而言)。
推荐阅读
- c# - 使用 Azure Log Analytics 在 Azure Function v3 中进行结构化日志记录
- regex - How to delete all characters comes after "-" in for all rows
- django - Django - 用于回复评论的嵌套查询
- c++ - 如何使用单位移位有效地左移 N 位?
- node.js - 如何在 Linux 上的 Azure 应用服务上运行时远程实时调试 node.js 应用
- html - 使用 Html Css 进行给定设计的扩展视图
- reactjs - 有没有办法在 React 中通过 goBack() 传递道具?
- nginx - 如何更改 odoo 12 中资产的 IP?
- mongodb - 一直在尝试使用 brew 安装 mongoDB,我所有的尝试都失败并出错。我正在使用安装了 Xcode 12 beta 的 macOS big sur
- android - 当使用空格时,flutter-autocomplete-textfield 不提示