ホームページ  >  記事  >  バックエンド開発  >  PHP は swoole を使用してマルチスレッド クローラーを実装します

PHP は swoole を使用してマルチスレッド クローラーを実装します

藏色散人
藏色散人転載
2020-01-16 14:12:273261ブラウズ

swoole では、php はサブプロセスを開始するメソッドを使用して、php の複数のプロセスを実現できます。

<?php
$s_time = time();
echo &#39;开始时间:&#39;.date(&#39;H:i:s&#39;,$s_time).PHP_EOL;
//进程数
$work_number=6;
 
//
$worker=[];
 
//模拟地址
$curl=[
    &#39;https://blog.csdn.net/feiwutudou&#39;,
    &#39;https://wiki.swoole.com/wiki/page/215.html&#39;,
    &#39;http://fanyi.baidu.com/?aldtype=16047#en/zh/manager&#39;,
    &#39;http://wanguo.net/Salecar/index.html&#39;,
    &#39;http://o.ngking.com/themes/mskin/login/login.jsp&#39;,
    &#39;https://blog.csdn.net/marksinoberg/article/details/77816991&#39;
];
 
//单线程模式
// foreach ($curl as $v) {
// echo curldeta($v);
// }
 
//创建进程
for ($i=0; $i < $work_number; $i++) {
    //创建多线程
    $pro=new swoole_process(function(swoole_process $work) use($i,$curl){
        //获取html文件
        $content=curldeta($curl[$i]);
        //写入管道
        $work->write($content.PHP_EOL);
    },true);
    $pro_id=$pro->start();
    $worker[$pro_id]=$pro;
}
//读取管道内容
foreach ($worker as $v) {
    echo $v->read().PHP_EOL;
}
 
//模拟爬虫
function curldeta($curl_arr)
{//file_get_contents
    echo $curl_arr.PHP_EOL;
    file_get_contents($curl_arr);
}
 
//进程回收
swoole_process::wait();
 
$e_time = time();
echo &#39;结束时间:&#39;.date(&#39;H:i:s&#39;,$e_time).PHP_EOL;
 
echo &#39;所用时间:&#39;.($e_time-$s_time).&#39;秒&#39;.PHP_EOL;
?>

マルチスレッドの実行結果:

PHP は swoole を使用してマルチスレッド クローラーを実装します

# # 比較のために、単一スレッドの結果:

PHP は swoole を使用してマルチスレッド クローラーを実装します

# 改善は非常に明白です。

PHP 関連の知識について詳しくは、

PHP チュートリアル をご覧ください。

以上がPHP は swoole を使用してマルチスレッド クローラーを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。