Utilizzo una implementazione multipla cURL "a rotazione" (come this SO post, basata su this cURL code). Funziona bene per elaborare migliaia di URL utilizzando fino a 100 richieste allo stesso tempo, con 5 istanze dello script eseguite come daemon (si, lo so, questo dovrebbe essere scritto in C o qualcosa del genere).cURL timeout multi impiccagione/ignorato
Ecco il problema: dopo l'elaborazione di ~ 200.000 url (tra le 5 istanze) curl_multi_exec()
sembra interromperle per tutte le istanze dello script. Ho provato a chiudere gli script, quindi a riavviarlo, e succede lo stesso (non dopo 200.000 url, ma al momento del riavvio), lo script si blocca chiamando curl_multi_exec()
.
Ho messo lo script in modalità 'single', elaborando un normale handle di cURL al momento, e funziona bene (ma non è proprio la velocità di cui ho bisogno). Il mio logging mi porta a sospettare che potrebbe aver colpito una patch di connessioni lente/problematiche (poiché ogni tanto sembra elaborare su URL e poi riattaccare), ma significherebbe che il mio CURLOPT_TIMEOUT
viene ignorato per i singoli handle. O forse è solo qualcosa con l'esecuzione di molte richieste attraverso l'arricciatura.
Qualcuno ha mai sentito parlare di qualcosa del genere?
codice di esempio (sempre sulla base this):
//some logging shows it hangs right here, only looping a time or two
//so the hang seems to be in the curl call
while(($execrun =
curl_multi_exec($master, $running)) == CURLM_CALL_MULTI_PERFORM);
//code to check for error or process whatever returned
devo CURLOPT_TIMEOUT
insieme a 120
, ma nei casi in cui curl_multi_exec()
torna finalmente alcuni dati, è dopo 10 minuti di attesa.
Ho un sacco di test/controllo ancora da fare, ma ho pensato che forse questo potrebbe suonare un campanello con qualcuno.
Il blocco persistente durante il riavvio sembra un problema con le connessioni di limitazione del server remoto. –
Usa 'shuffle()' prima dell'elaborazione, per la vittoria. –