'n Blokkerende proxy-poelopsoek kan Scrapy laat stagneer
Hou 'n sinchrone proxy-poel-API-oproep uit Scrapy se gebeurtenislus-pad en gee eindpuntontdekking sy eie foutbeleid.
Die crawler het genoeg gelyktydige versoeke opgestel. Dit stop steeds wanneer dit die proxy-poel om nog 'n adres vra. Om meer proxies by te voeg raak nie daardie stop nie.
'n Algemene middleware-patroon roep requests.get(pool_url) binne process_request(). Dit is 'n sinchrone netwerkbewerking in 'n pad wat verwag word om met Scrapy se asinchrone enjin saam te werk. Terwyl die oproep wag, kan dit onverwante werk op dieselfde gebeurtenislus-draad ophou.
Daar is twee versoeke in die taak
Een versoek verkry 'n eindpunt van die poeldiens. Die ander gebruik daardie eindpunt om die bestemming te kontak. Meet en rapporteer hulle afsonderlik. 'n Stadige poel-API kan elke gekose proxy stadig laat lyk voordat die toepassing selfs daaraan gekoppel het.
Gebruik 'n asinchrone ontdekkingsintegrasie wat deur die geinstalleerde Scrapy-weergawe ondersteun word, of verkry en verfris 'n begrensde plaaslike eindpuntstel buite die kritieke pad per versoek. As blokkerende werk afgelaai moet word, gee daardie uitvoerder sy eie limiete en tydsverloopafhandeling; 'n onbeperkte tou verplaas net die vertraging.
Moenie outomaties vir elke versoek nog 'n ontdekkingsoproep doen nie. 'n Kortstondige kas of 'n gehuurde bondel kan die afhanklikheid van die poeldiens verminder, mits die leeftyd by die diens se werklike eindpuntbeleid pas.
Definieer wat 'n mislukte opsoek beteken
'n Leë of mislukte poelantwoord moet nie stilweg die proxy-metadata verwyder en 'n direkte versoek toelaat nie. Kies 'n eksplisiete uitkoms: wag binne die taakbegroting, misluk, of gebruik 'n goedgekeurde gekaste eindpunt.
Hou ook die poel-API se eie roete skoon. As dit 'n interne diens is, kan die stuur van sy private hostnaam deur die proxy wat hy help kies, 'n kringafhanklikheid skep.
Sodra ontdekking werk sonder om onverwante werk te blokkeer, ondersoek die gewone proxy-transaksie. Dit is aparte herstelwerk, en hul tydsberekening verdien aparte velde in die log.