Le crawler dispose de suffisamment de requêtes simultanées configurées. Il s'arrête pourtant chaque fois qu'il demande une autre adresse au pool de proxys. Ajouter des proxys ne change rien à cette pause.

Un modèle de middleware courant appelle requests.get(pool_url) à l'intérieur de process_request(). C'est une opération réseau synchrone sur un chemin censé coopérer avec le moteur asynchrone de Scrapy. Pendant l'attente de l'appel, il peut retarder un travail sans rapport sur le même thread de la boucle d'événements.

La tâche comporte deux requêtes

Une requête obtient un endpoint auprès du service de pool. L'autre utilise cet endpoint pour joindre la destination. Mesurez-les et rapportez-les séparément. Une API de pool lente peut faire paraître lent chaque proxy sélectionné avant même que l'application ne s'y soit connectée.

Utilisez une intégration de découverte asynchrone prise en charge par la version installée de Scrapy, ou obtenez et rafraîchissez un ensemble local borné d'endpoints hors du chemin critique de chaque requête. Si un travail bloquant doit être déporté, donnez à cet exécuteur ses propres limites et sa gestion des délais d'attente ; une file illimitée ne fait que déplacer le retard.

N'émettez pas automatiquement un autre appel de découverte pour chaque requête. Un cache de courte durée ou un lot loué peut réduire la dépendance au service de pool, à condition que sa durée de vie corresponde à la politique réelle d'endpoints du service.

Définissez ce que signifie une recherche échouée

Une réponse vide ou en échec du pool ne doit pas supprimer silencieusement les métadonnées du proxy et autoriser une requête directe. Choisissez un résultat explicite : attendre dans le budget de la tâche, échouer, ou utiliser un endpoint en cache approuvé.

Gardez aussi la route propre de l'API du pool. S'il s'agit d'un service interne, envoyer son nom d'hôte privé à travers le proxy même qu'elle aide à sélectionner peut créer une dépendance circulaire.

Une fois que la découverte fonctionne sans bloquer de travail sans rapport, examinez la transaction proxy ordinaire. Ce sont des réparations distinctes, et leur chronométrage mérite des champs distincts dans le journal.

Articles similaires