管理者APIキーでスロットリング制限を回避する方法

Basさん、こんにちは。

返信が遅くなり申し訳ありません。

Discourse連携をローンチしたため、レート制限に関連する問題が発生しないように、現在再度確認しています。

制限されていないことを確認するために、新しいキーでテストしました。明確にするために、管理者APIキーとは具体的に何を意味しますか?

以下の設定でキーを作成しました。

「APIキーには制限がなく、すべてのエンドポイントにアクセスできます。」と表示されています。

ローカルのPythonシェルから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 で実行すると、すべて正常に完了します。

さらに詳細が必要な場合はお知らせください。ありがとうございます。