我正在使用'滾動'cURL多實現(如this SO post,基於this cURL code)。它可以同時處理數以千計的URL,最多可以使用100個請求,5個腳本作爲守護進程運行(我知道,這應該用C或其他語言編寫)。cURL多掛/忽略超時
下面是問題:在處理大約200,000個URL(跨越5個實例)之後,curl_multi_exec()
似乎中斷了腳本的所有實例。我嘗試關閉腳本,然後重新啓動,並且發生同樣的事情(不是在20萬個URL之後,而是在重新啓動之後),腳本掛起呼叫curl_multi_exec()
。
我把腳本置於'single'模式,在一次處理一個常規的cURL句柄,並且工作正常(但它不是我需要的速度)。我的日誌記錄導致我懷疑它可能已經遇到了一些緩慢/有問題的連接(因爲每隔好幾次似乎在URL上處理然後再掛起),但是這意味着我的CURLOPT_TIMEOUT
被單個句柄忽略。或者,也許這只是通過cURL運行許多請求而已。
有人聽說過這樣的事嗎?
示例代碼(同樣基於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
我CURLOPT_TIMEOUT
設置爲120
,但在curl_multi_exec()
終於返回一些數據的情況下,10分鐘後等待的。
我有一堆測試/檢查還沒有做,但也許這可能會與某人打鈴。
通過重新啓動持續的掛起聽起來像是遠程服務器調節連接的問題。 – 2015-02-03 07:23:29
在處理之前使用'shuffle()'來獲勝。 – 2017-01-16 22:49:05