代码之家  ›  专栏  ›  技术社区  ›  J. Taylor

如何在python中随机地随机随机地无序处理asyncio.queue?

  •  1
  • J. Taylor  · 技术社区  · 7 年前

    当我想在python中随机移动一个列表时,我会:

    from random import shuffle
    shuffle(mylist)
    

    我如何做等效于 asyncio.Queue 是吗?我是否必须将队列转换为列表,无序排列列表,然后将它们放回队列?或者有直接的方法吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Mikhail Gerasimov    7 年前

    正如你在书中看到的 Queue source code 项目 排队 实际存储在 _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 = asyncio.Queue()
    shuffle(queue._queue)
    

    由于显而易见的原因,这通常不是一个好的解决方案,但另一方面,可能性是 排队 未来的实现将发生变化,使IT问题看起来相对较低(至少在我看来)。

    推荐文章