利用curl_multi_init并行多线程处理网络数据
Jul 30, 2016 pm 01:31 PM<code><span>for</span> (<span>$i</span>=<span>0</span>; <span>$i</span> 100; <span>$i</span>++) { <span>$urls</span>[] = <span>"http://blog.csdn.net/lg_lin?wd="</span>.mt_rand(<span>10000</span>,<span>20000</span>); } <span>$t</span> = microtime(<span>true</span>); <span>//单线程</span><span>foreach</span> (<span>$urls</span><span>as</span><span>$key</span> => <span>$value</span>) { <span>$ch</span> = curl_init(); curl_setopt(<span>$ch</span>, CURLOPT_SSL_VERIFYPEER, <span>FALSE</span>); curl_setopt(<span>$ch</span>, CURLOPT_RETURNTRANSFER, <span>TRUE</span>); curl_setopt(<span>$ch</span>, CURLOPT_TIMEOUT, <span>30</span>); curl_setopt(<span>$ch</span>, CURLOPT_URL, <span>$value</span>); <span>$response</span> = curl_exec(<span>$ch</span>); curl_close(<span>$ch</span>); <span>$result_new</span>[<span>$key</span>] = <span>$response</span>; } var_dump(<span>$result_new</span>); <span>$e</span> = microtime(<span>true</span>); <span>echo</span><span>"For循环:"</span>.(<span>$e</span>-<span>$t</span>).<span>"\n"</span>; <span>/** **** 多线程**** * 由于受网络带宽限制,一次性不能并发太多,可以分批处理 * 总量超过100以后,效果就比单线程明显提高 */</span><span>$p</span> = <span>5</span>;<span>//每次执行多少条</span><span>$ring</span> = ceil(count(<span>$urls</span>) / <span>$p</span>); <span>for</span>(<span>$n</span> = <span>0</span>; <span>$n</span> $ring; <span>$n</span>++) { <span>$temp_url</span> = <span>array</span>(); <span>$star</span> = <span>$n</span> * <span>$p</span>; <span>$end</span> = (<span>$n</span>+<span>1</span>) * <span>$p</span>; <span>for</span>(<span>$ii</span> = <span>$star</span>; <span>$ii</span> $end; <span>$ii</span>++) { <span>if</span> (<span>isset</span>(<span>$urls</span>[<span>$ii</span>])) { <span>$temp_url</span>[] = <span>$urls</span>[<span>$ii</span>]; } } <span>$mh</span> = curl_multi_init(); <span>foreach</span> (<span>$temp_url</span><span>as</span><span>$i</span> => <span>$url</span>) { <span>$conn</span>[<span>$i</span>] = curl_init(<span>$url</span>); curl_setopt(<span>$conn</span>[<span>$i</span>], CURLOPT_USERAGENT, <span>$_SERVER</span>[<span>'HTTP_USER_AGENT'</span>]); curl_setopt(<span>$conn</span>[<span>$i</span>], CURLOPT_SSL_VERIFYPEER, <span>FALSE</span>); curl_setopt(<span>$conn</span>[<span>$i</span>], CURLOPT_RETURNTRANSFER, <span>TRUE</span>); curl_setopt(<span>$conn</span>[<span>$i</span>], CURLOPT_TIMEOUT, <span>30</span>); curl_setopt(<span>$conn</span>[<span>$i</span>], CURLOPT_URL, <span>$url</span>); curl_multi_add_handle(<span>$mh</span>,<span>$conn</span>[<span>$i</span>]); } <span>do</span>{ curl_multi_exec(<span>$mh</span>, <span>$active</span>); } <span>while</span> (<span>$active</span>); <span>$active</span> = <span>null</span>; <span>foreach</span> (<span>$temp_url</span><span>as</span><span>$i</span> => <span>$url</span>) { <span>$data</span>[<span>$i</span>] = curl_multi_getcontent(<span>$conn</span>[<span>$i</span>]); <span>// 获得爬取的代码字符串</span> } <span>foreach</span> (<span>$temp_url</span><span>as</span><span>$i</span> => <span>$url</span>) { curl_multi_remove_handle(<span>$mh</span>, <span>$conn</span>[<span>$i</span>]); curl_close(<span>$conn</span>[<span>$i</span>]); } curl_multi_close(<span>$mh</span>); var_dump(<span>$data</span>); } <span>$t</span> = microtime(<span>true</span>); <span>echo</span><span>"多线程:"</span>.(<span>$t</span>-<span>$e</span>).<span>"\n"</span>; <span>exit</span>();</code>
版权声明:本文为博主原创文章,未经博主允许不得转载。
以上就介绍了利用curl_multi_init并行多线程处理网络数据,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Comment réaliser la conversion mutuelle entre les requêtes CURL et python en python

Tutoriel sur la mise à jour de la version curl sous Linux !

Sortie de PHP8.1 : introduction de curl pour le traitement simultané de plusieurs requêtes

Du début à la fin : Comment utiliser l'extension php cURL pour effectuer des requêtes HTTP

Comment gérer la redirection 301 des pages web en PHP Curl ?

Comment définir des cookies dans php curl

Solution à l'erreur fatale PHP : appel à une fonction non définie curl_setopt()
