【问题标题】:Python Asynchronous (Parallel) REST API Requests with Pagination带有分页的 Python 异步(并行)REST API 请求
【发布时间】: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 上的人可以帮助我掌握我所缺少的基本知识,以便我可以学习并以此为基础。

【问题讨论】:

标签: python rest asynchronous pagination aiohttp


【解决方案1】:

您的问题是关于预测魔法,而不是计算机科学。

如果对于下一个请求,您需要前一个请求的结果——您不能并行执行两个请求。

【讨论】:

  • 但是我真的需要知道上一个请求中的任何内容才能进行下一个请求吗?我知道我可以将每个请求偏移 10,并且我大概知道我需要始终保持 5 个请求,并且我还可以知道我过去已经请求了哪些偏移,对吧?因此,由于缺少更好的术语,无论处理将每个偏移量增加 10 并保持 5 个并行请求线程运行的任何外部进程,都可以无限期地保持批处理请求并递增,直到其中一个内部线程完成记录计数并告诉外部进程停止制作新线程?
猜你喜欢
  • 2012-02-25
  • 2018-03-04
  • 2022-01-06
  • 2017-12-11
  • 2013-04-23
  • 1970-01-01
  • 2013-03-20
  • 1970-01-01
相关资源
最近更新 更多