Il crawler ha abbastanza richieste concorrenti configurate. Eppure si ferma ogni volta che chiede un altro indirizzo al pool di proxy. Aggiungere altri proxy non tocca quella pausa.

Un tipico pattern middleware chiama requests.get(pool_url) dentro process_request(). È un'operazione di rete sincrona su un percorso che dovrebbe collaborare con il motore asincrono di Scrapy. Mentre la chiamata attende, può trattenere lavoro non correlato sullo stesso thread del ciclo di eventi.

Nel lavoro ci sono due richieste

Una richiesta ottiene un endpoint dal servizio del pool. L'altra usa quell'endpoint per contattare la destinazione. Misurale e riportale separatamente. Un'API del pool lenta può far sembrare lento ogni proxy scelto prima ancora che l'applicazione vi si sia connessa.

Usa un'integrazione di rilevamento asincrona supportata dalla versione di Scrapy installata, oppure ottieni e aggiorna un insieme locale limitato di endpoint fuori dal percorso critico di ogni richiesta. Se il lavoro bloccante deve essere spostato, assegna a quell'esecutore limiti propri e gestione dei timeout; una coda illimitata sposta solo il ritardo.

Non emettere automaticamente un'altra chiamata di rilevamento per ogni richiesta. Una cache di breve durata o un lotto in affitto possono ridurre la dipendenza dal servizio del pool, a condizione che la loro durata si adatti alla politica effettiva degli endpoint del servizio.

Definisci cosa significa una ricerca fallita

Una risposta vuota o fallita del pool non dovrebbe rimuovere silenziosamente i metadati del proxy e consentire una richiesta diretta. Scegli un esito esplicito: attendere entro il budget dell'attività, fallire, oppure usare un endpoint in cache approvato.

Mantieni libera anche la rotta propria dell'API del pool. Se è un servizio interno, inviare il suo hostname privato attraverso proprio il proxy che aiuta a selezionare può creare una dipendenza circolare.

Una volta che il rilevamento funziona senza bloccare lavoro non correlato, esamina la normale transazione proxy. Sono riparazioni separate, e il loro tempo merita campi separati nel registro.

Articoli correlati