如何使用管理员API密钥避免速率限制?

您好 @Bas

抱歉回复延迟!

我现在正在重新审视这个问题,因为我们已经集成了 Discourse,并且希望确保不会遇到任何与速率限制相关的问题。

我用一个新密钥进行了测试,以确保它没有任何限制。明确地说,您所说的管理员 API 密钥具体指什么?

我创建了一个具有以下设置的密钥:

它显示,“API 密钥没有限制,所有端点均可访问。”

我正在通过从本地 Python shell 发出 API 请求来测试这一点,因此它们来自同一个 IP 地址。我们在服务器上运行脚本时也遇到了速率限制。在这种情况下,所有请求都来自同一个 IP 地址。

我已确认使用以下代码会达到速率限制:

async def get_topic_post_stream(topic_id):
    url = f"{DISCOURSE_URL}/t/{topic_id}"
    async with httpx.AsyncClient(headers=HEADERS) as client:
        topic = await client.get(url)
    return topic.status_code


async def get_topic_post_streams(topic_ids):
    tasks = [functools.partial(get_topic_post_stream, topic_id) for topic_id in topic_ids]
    topics = await aiometer.run_all(
        tasks,
        # max_per_second=1,
        )
    return topics

# 只获取 topic_ids 中 15 个主题的一个切片进行测试。
topics = asyncio.run(get_topic_post_streams(topic_ids[:15]))

请注意,max_per_second 参数被注释掉了,这意味着请求数量没有限制。

这在 2.05 秒内完成,并且 15 个请求中有 2 个返回 429

当我运行 max_per_second=1 时,所有请求都成功完成。

如果您能提供更多详细信息,请告诉我。谢谢!