Blokirajuće traženje proxy poola može zaustaviti Scrapy
Držite sinkroni poziv API-ja proxy poola izvan putanje petlje događaja u Scrapyju i dajte otkrivanju krajnjih točaka vlastitu politiku kvarova.
Puzalac ima dovoljno konfiguriranih istovremenih zahtjeva. Ipak stane kad god od proxy poola zatraži drugu adresu. Dodavanje više proxyja ne dira to zaustavljanje.
Uobičajen obrazac middlewarea poziva requests.get(pool_url) unutar process_request(). To je sinkrona mrežna operacija na putanji koja treba surađivati s asinkronim Scrapyjevim motorom. Dok poziv čeka, može zadržati nepovezani rad na istoj niti petlje događaja.
U poslu su dva zahtjeva
Jedan zahtjev dobiva krajnju točku od servisa poola. Drugi koristi tu krajnju točku za kontakt s odredištem. Mjerite ih i izvještavajte odvojeno. Spor API poola može učiniti svaki odabrani proxy sporim prije nego što se aplikacija uopće s njim poveže.
Koristite integraciju asinkronog otkrivanja koju podržava instalirana verzija Scrapyja ili pribavite i osvježavajte ograničen lokalni skup krajnjih točaka izvan kritične putanje svakog zahtjeva. Ako se blokirajući rad mora prebaciti, dajte tom izvršitelju vlastita ograničenja i rukovanje vremenskim ograničenjima; neograničen red samo premješta kašnjenje.
Ne izdavajte automatski još jedan poziv otkrivanja za svaki zahtjev. Kratkotrajni keš ili iznajmljena serija mogu smanjiti ovisnost o servisu poola, pod uvjetom da njihov životni vijek odgovara stvarnoj politici krajnjih točaka tog servisa.
Definirajte što znači neuspješno traženje
Prazan ili neuspješan odgovor poola ne smije tiho ukloniti metapodatke proxyja i dopustiti izravan zahtjev. Odaberite izričit ishod: čekanje unutar proračuna zadatka, neuspjeh ili korištenje odobrene keširane krajnje točke.
Održavajte i vlastitu rutu API-ja poola čistom. Ako je to interni servis, slanje njegovog privatnog imena hosta kroz upravo onaj proxy koji pomaže odabrati može stvoriti kružnu ovisnost.
Kad otkrivanje radi bez blokiranja nepovezanog rada, pregledajte običnu proxy transakciju. To su odvojene popravke i njihovo vrijeme zaslužuje odvojena polja u dnevniku.