loop = asyncio.get_event_loop()
exerciseId = [1,2,3]
// once 为协程
tasks = [once(i) for i in exerciseId]
loop.run_until_complete(asyncio.gather(*tasks))
Expected: 执行顺序是 once(1),once(2),once(3)
In fact: 是无序的,譬如是 2,3,1 的顺序
于是去查看 asyncio.gather 源码的时候,发现这么一行代码:for arg in set(coros_or_futures):。这个函数对列表 tasks 先进行了一次 set()操作,而 set 在 python 里是通过 hash 实现的,所以导致的无序是么?
那现在我希望按列表里的顺序进行添加 Task 操作,有什么好的办法呢?