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 操作,有什么好的办法呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.