Pour un pool fixe, la sélection en round-robin peut être agréablement courte :

from itertools import cycle

choices = cycle([
    "http://proxy-a.example:8080",
    "http://proxy-b.example:8080",
    "http://proxy-c.example:8080",
])

endpoint = next(choices)

Remplacez les URL d'exemple par des points de terminaison HTTP de votre service ou de la liste de proxys HTTP. Les appels successifs renvoient A, B, C, puis de nouveau A. Utilisez la valeur sélectionnée lors de la configuration de la requête suivante. Recréer l'itérateur à chaque requête redémarrerait la séquence. Avec Requests, transmettez le point de terminaison sélectionné à la requête.

Si vous préférez une liste, déplacez-en le premier élément à la fin. pool.append(pool.pop()) retire le dernier élément et le remet aussitôt ; le premier élément ne change jamais. L'opération de file est pool.append(pool.pop(0)), mais retirer en tête décale les autres éléments de la liste.

L'itérateur a une tâche délibérément modeste. Il ne vérifie pas la disponibilité, ne supprime pas les entrées en échec et ne garantit pas une sortie publique différente. Plusieurs points de terminaison peuvent partager une même adresse externe.

Gardez la politique de nouvelle tentative et les mises à jour du pool en dehors de ce petit sélecteur. Un itérateur partagé a aussi besoin d'un modèle de propriété intentionnel dans le code concurrent afin que le point de terminaison choisi reste attaché à l'opération qui l'a reçu.

Articles similaires