【发布时间】:2018-07-23 06:18:29
【问题描述】:
我在使用 Python 3.5+ asyncio(我相信更具体地说是 aiohttp)处理异步/并行请求时遇到了麻烦。
我已经阅读了多个示例,这些示例定义了如何使用 aiohttp 执行异步请求,但它们似乎都使用静态预定义 URL 来多次点击或使用静态预定义 URL 列表。
我想要完成的是一次向单个 REST API 端点发送多个(比如两个)并行请求,该端点实现了一个偏移计数器来对记录进行分页,并随着每次迭代继续递增,直到所有记录都通过 API 返回累死了。
REST API 返回如下所示的 JSON 数据:
[{
"user_id": "user1",
"first_name": "User",
"last_name": "One"
}, {
"user_id": "user2",
"first_name": "User",
"last_name": "Two"
}, {
"user_id": "user3",
"first_name": "User",
"last_name": "Three"
}]
这些重复的 GET 请求将返回总共 45 条记录,一次十项:
GET /api/users/?limit=10&offset=0
GET /api/users/?limit=10&offset=10
GET /api/users/?limit=10&offset=20
GET /api/users/?limit=10&offset=30
GET /api/users/?limit=10&offset=40
GET /api/users/?limit=10&offset=50
鉴于只有 45 条记录,最后一个查询将返回空记录数,倒数第二个查询将仅返回 5 条记录(最多 10 条记录)。
目标是停止增加偏移量并停止生成新请求,因为返回的记录数将小于请求中的限制(记录耗尽)。它还允许现有线程完成它们的完整请求并将结果合并到一个列表中,该列表可以稍后在代码中处理,与 API 请求本身无关。
我的互联网搜索返回的很少,特别是关于分页请求,所以我希望 Stack Overflow 上的人可以帮助我掌握我所缺少的基本知识,以便我可以学习并以此为基础。
【问题讨论】:
-
你可能会被以一种奇怪的方式问这个问题...See this stackoverflow question
标签: python rest asynchronous pagination aiohttp