Rumah pembangunan bahagian belakang tutorial php 利用curl_multi_init并行多线程处理网络数据

利用curl_multi_init并行多线程处理网络数据

Jul 30, 2016 pm 01:31 PM
curl multi

<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> =&gt; <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> =&gt; <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> =&gt; <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> =&gt; <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>
Salin selepas log masuk

版权声明:本文为博主原创文章,未经博主允许不得转载。

以上就介绍了利用curl_multi_init并行多线程处理网络数据,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk merealisasikan penukaran bersama antara permintaan CURL dan python dalam python Bagaimana untuk merealisasikan penukaran bersama antara permintaan CURL dan python dalam python May 03, 2023 pm 12:49 PM

Bagaimana untuk merealisasikan penukaran bersama antara permintaan CURL dan python dalam python

Tutorial mengemas kini versi curl di bawah Linux! Tutorial mengemas kini versi curl di bawah Linux! Mar 07, 2024 am 08:30 AM

Tutorial mengemas kini versi curl di bawah Linux!

PHP8.1 dikeluarkan: Memperkenalkan curl untuk pemprosesan serentak berbilang permintaan PHP8.1 dikeluarkan: Memperkenalkan curl untuk pemprosesan serentak berbilang permintaan Jul 08, 2023 pm 09:13 PM

PHP8.1 dikeluarkan: Memperkenalkan curl untuk pemprosesan serentak berbilang permintaan

Dari awal hingga akhir: Cara menggunakan cURL sambungan php untuk membuat permintaan HTTP Dari awal hingga akhir: Cara menggunakan cURL sambungan php untuk membuat permintaan HTTP Jul 29, 2023 pm 05:07 PM

Dari awal hingga akhir: Cara menggunakan cURL sambungan php untuk membuat permintaan HTTP

apa itu linux curl apa itu linux curl Apr 20, 2023 pm 05:05 PM

apa itu linux curl

Bagaimana untuk mengendalikan 301 pengalihan semula halaman web dalam PHP Curl? Bagaimana untuk mengendalikan 301 pengalihan semula halaman web dalam PHP Curl? Mar 08, 2024 am 11:36 AM

Bagaimana untuk mengendalikan 301 pengalihan semula halaman web dalam PHP Curl?

Bagaimana untuk menetapkan kuki dalam php curl Bagaimana untuk menetapkan kuki dalam php curl Sep 26, 2021 am 09:27 AM

Bagaimana untuk menetapkan kuki dalam php curl

Penyelesaian kepada ralat Fatal PHP: Panggilan ke fungsi undefined curl_setopt() Penyelesaian kepada ralat Fatal PHP: Panggilan ke fungsi undefined curl_setopt() Jun 23, 2023 am 08:18 AM

Penyelesaian kepada ralat Fatal PHP: Panggilan ke fungsi undefined curl_setopt()

See all articles