2014-11-05 64 views
0

我使用捲曲捲曲多線程

For (i=0; i<1000000; i++) { 

    $curl_handle=curl_init(); 
    curl_setopt($curl_handle,CURLOPT_URL,'http://example.com?page='i); 
    curl_exec($curl_handle); 
    curl_close($curl_handle); 

    // some code to save the HTML page on HDD 
} 

我想知道是否有好歹我可以加快這一進程的URL刮數據?可能是多線程?我怎麼能這樣做?

+0

你可以實現像異步調用這裏是鏈接 - > https://segment.com/blog/how-to-make-async-requests-in-php/ – krish 2014-11-05 05:08:16

+0

也是如此回答@http:// stackoverflow .COM /問題/ 124462 /異步PHP通話 – krish 2014-11-05 05:09:04

回答

2

捲曲多不作並行請求,它使異步請求。

該文檔在5分鐘前是錯誤的,需要一段時間才能部署和翻譯正確的文檔。異步I/O(使用像cURL Multi API這樣的東西)是最簡單的事情,但它只能異步地發出請求;一旦下載數據(例如寫入磁盤)的處理仍然會導致大量阻塞I/O,類似地,進一步處理數據(例如解析json)將在單個執行線程中同步發生。

多線程是另一種選擇,這要求您有線程安全構建的PHP和安裝的pthreads擴展。

多線程的優勢在於,可以爲每次下載和後續並行操作完成所有處理,充分利用所有可用的CPU內核。

什麼是最好的,很大程度上取決於您的代碼必須執行多少處理下載的數據,甚至可以認爲是一個意見。