Eine blockierende Proxy-Pool-Abfrage kann Scrapy ausbremsen
Halte einen synchronen API-Aufruf des Proxy-Pools aus dem Ereignisschleifen-Pfad von Scrapy heraus und gib der Endpunkt-Erkennung eine eigene Fehlerpolitik.
Der Crawler hat reichlich gleichzeitige Anfragen konfiguriert. Trotzdem hält er an, sobald er den Proxy-Pool nach einer weiteren Adresse fragt. Mehr Proxys hinzuzufügen ändert an diesem Halt nichts.
Ein übliches Middleware-Muster ruft requests.get(pool_url) innerhalb von process_request() auf. Das ist eine synchrone Netzwerkoperation auf einem Pfad, der mit der asynchronen Engine von Scrapy zusammenarbeiten soll. Während der Aufruf wartet, kann er fremde Arbeit auf demselben Ereignisschleifen-Thread aufhalten.
Im Job stecken zwei Anfragen
Eine Anfrage holt einen Endpunkt vom Pool-Dienst. Die andere nutzt diesen Endpunkt, um das Ziel zu kontaktieren. Miss und melde beide getrennt. Eine langsame Pool-API kann jeden ausgewählten Proxy langsam aussehen lassen, bevor die Anwendung überhaupt mit ihm verbunden ist.
Nutze eine asynchrone Erkennungsintegration, die die installierte Scrapy-Version unterstützt, oder hole und erneuere ein begrenztes lokales Endpunkt-Set außerhalb des kritischen Pfads jeder Anfrage. Muss blockierende Arbeit ausgelagert werden, gib diesem Executor eigene Grenzen und Timeout-Behandlung; eine unbegrenzte Warteschlange verlagert die Verzögerung nur.
Stelle nicht für jede Anfrage automatisch einen weiteren Erkennungsaufruf. Ein kurzlebiger Cache oder ein geleastes Batch kann die Abhängigkeit vom Pool-Dienst verringern, sofern seine Lebensdauer zur tatsächlichen Endpunkt-Politik des Dienstes passt.
Definiere, was eine fehlgeschlagene Abfrage bedeutet
Eine leere oder fehlgeschlagene Pool-Antwort sollte nicht stillschweigend die Proxy-Metadaten entfernen und eine direkte Anfrage erlauben. Wähle ein ausdrückliches Ergebnis: innerhalb des Aufgabenbudgets warten, fehlschlagen oder einen freigegebenen gecachten Endpunkt nutzen.
Halte auch die eigene Route der Pool-API frei. Ist sie ein interner Dienst, kann das Senden ihres privaten Hostnamens durch genau den Proxy, bei dessen Auswahl sie hilft, eine zirkuläre Abhängigkeit erzeugen.
Sobald die Erkennung ohne Blockierung fremder Arbeit funktioniert, untersuche die gewöhnliche Proxy-Transaktion. Das sind getrennte Reparaturen, und ihr Timing verdient getrennte Felder im Log.