• PHP使用swoole实现多线程爬虫


    在swoole中,php可以借助其启动子进程的方式,实现php的多进程:

    <?php
    
    $s_time = time();
    
    echo '开始时间:'.date('H:i:s',$s_time).PHP_EOL;
    
    //进程数
    
    $work_number=6;
    
      
    
    //
    
    $worker=[];
    
      
    
    //模拟地址
    
    $curl=[
    
        'https://blog.csdn.net/feiwutudou',
    
        'https://wiki.swoole.com/wiki/page/215.html',
    
        'http://fanyi.baidu.com/?aldtype=16047#en/zh/manager',
    
        'http://wanguo.net/Salecar/index.html',
    
        'http://o.ngking.com/themes/mskin/login/login.jsp',
    
        'https://blog.csdn.net/marksinoberg/article/details/77816991'
    
    ];
    
      
    
    //单线程模式
    
    // 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 '结束时间:'.date('H:i:s',$e_time).PHP_EOL;
    
      
    
    echo '所用时间:'.($e_time-$s_time).'秒'.PHP_EOL;
    
    ?>
    

      

    多线程执行结果:

    作为对比,单线程结果:

    提升十分明显!

    以上就是PHP使用swoole实现多线程爬虫的详细内容

    更多学习内容请访问:

    腾讯T3-T4标准精品PHP架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新)

    以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以加入我的官方群

  • 相关阅读:
    JavaSE-面向对象
    JavaSE-数组
    JavaSE-方法
    JavaSE-流程控制
    JavaSE-基础语法
    Java-初识Java
    PTH的几种食用姿势
    CVE-2020-1472 Zerologon
    OpenGL 术语
    使用IDEA创建SpringMVC项目
  • 原文地址:https://www.cnblogs.com/a609251438/p/12642470.html
Copyright © 2020-2023  润新知