Comment éviter les limites d'étranglement avec la clé API admin ?

Salut @Bas,

Désolé pour ma réponse tardive !

Je me penche à nouveau sur ce problème car nous avons lancé une intégration Discourse et nous voulons nous assurer de ne rencontrer aucun problème lié aux limites de débit.

Je l’ai testé avec une nouvelle clé pour m’assurer qu’elle n’est limitée d’aucune façon. Pour être clair, que voulez-vous dire exactement par clé API d’administrateur ?

J’ai créé une clé avec les paramètres suivants :

Il est indiqué : « La clé API n’a aucune restriction et tous les points d’accès sont accessibles ».

Je teste cela en effectuant des requêtes API depuis un shell Python local, donc elles proviennent de la même adresse IP. Nous avons également rencontré les limites de débit lors de l’exécution d’un script sur notre serveur. Dans ce cas, toutes les requêtes provenaient de la même adresse IP.

J’ai confirmé que la limite de débit est atteinte avec le code suivant :

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

# Obtenez simplement une tranche de 15 des sujets dans topic_ids pour le test.
topics = asyncio.run(get_topic_post_streams(topic_ids[:15]))

Notez que le paramètre max_per_second est commenté, ce qui n’impose aucune limite au nombre de requêtes.

Cela se termine en 2,05 s et 2 des 15 requêtes retournent 429.

Lorsque je l’exécute avec max_per_second=1, tout se termine avec succès.

Faites-moi savoir si je peux fournir plus de détails. Merci !