Et blokerende proxy-puljeopslag kan stoppe Scrapy
Hold et synkront proxy-pulje-API-kald ude af Scrapys hændelsesløkke-sti, og giv endpoint-opdagelse sin egen fejlstrategi.
Crawleren har rigeligt med samtidige anmodninger konfigureret. Alligevel holder den pause, hver gang den beder proxy-puljen om endnu en adresse. At tilføje flere proxies rører ikke ved den pause.
Et almindeligt middleware-mønster kalder requests.get(pool_url) inde i process_request(). Det er en synkron netværksoperation på en sti, der forventes at samarbejde med Scrapys asynkrone motor. Mens kaldet venter, kan det holde uvedkommende arbejde tilbage på samme hændelsesløkke-tråd.
Der er to anmodninger i jobbet
Den ene anmodning henter et endpoint fra puljetjenesten. Den anden bruger det endpoint til at kontakte destinationen. Mål og rapporter dem hver for sig. En langsom pulje-API kan få hver valgt proxy til at virke langsom, før applikationen overhovedet har forbundet til den.
Brug en asynkron opdagelsesintegration, som den installerede Scrapy-version understøtter, eller hent og opdater et begrænset lokalt endpoint-sæt uden for den kritiske sti pr. anmodning. Hvis blokerende arbejde skal flyttes, skal den executor have sine egne grænser og timeout-håndtering; en ubegrænset kø flytter blot forsinkelsen.
Undlad automatisk at sende endnu et opdagelseskald for hver anmodning. En kortlivet cache eller en leaset batch kan reducere afhængigheden af puljetjenesten, forudsat at levetiden passer til tjenestens faktiske endpoint-politik.
Definér, hvad et mislykket opslag betyder
Et tomt eller mislykket puljesvar bør ikke lydløst fjerne proxy-metadataene og tillade en direkte anmodning. Vælg et eksplicit udfald: vent inden for opgavens budget, fejl, eller brug et godkendt cachet endpoint.
Hold også pulje-API'ens egen rute fri. Hvis det er en intern tjeneste, kan det at sende dens private værtsnavn gennem netop den proxy, den hjælper med at vælge, skabe en cirkulær afhængighed.
Når opdagelsen virker uden at blokere uvedkommende arbejde, skal du undersøge den almindelige proxy-transaktion. Det er separate reparationer, og deres timing fortjener separate felter i loggen.