首页 >后端开发 >php教程 > 正文

PHP使用swoole实现多线程爬虫

转载2020-01-16 14:12:2711016
在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;
?>

多线程执行结果:

4d8084991537fd94f8576f37ac80f21.png

作为对比,单线程结果:

a3d1d04d9063f5c55fc958a0e72162b.png

提升十分明显!

更多PHP相关知识,请访问PHP教程

以上就是PHP使用swoole实现多线程爬虫的详细内容,更多请关注php中文网其它相关文章!

php中文网最新课程二维码
  • 相关标签:PHP
  • 本文转载于:csdn,如有侵犯,请联系a@php.cn删除
  • 相关文章

    相关视频


    网友评论

    文明上网理性发言,请遵守 新闻评论服务协议

    我要评论条评论
    learn
  • learn· 2020-02-06 21:16:041楼
  • 这叫进程大哥,不是多线程

  • Go对与IO事件的处理是单线的,无法利核,吞吐量稍弱于swoole;在际的TCP/UDP密集IO压测中,swoole要稍优于go。
    swoolephp最本质区别是:1、swoolePHP的一个扩展;2、PHPer可以基于swoole过去PHP无法的功能;3、Swoole使纯C语言编写,提供了PHP语言的异步线服务器
    swoole支持线Swoole\Server的主进是一个线序。其中有一组很重要的线,称之为Reactor线。但是由于PHP语言不支持线,因此Swoole使模式。
    swoole线Swoole\Server的主进是一个线序。其中有一组很重要的线,称之为Reactor线。但是由于PHP语言不支持线,因此Swoole使模式。
    java线的方法:1、通过继承Thread类的方式。2、通过Runnable接口的方式。3、通过Callable接口线。4、使线线
    下面由workerman使栏目给大家介绍workerman异步任务的方法,希望对需要的朋友有所帮助!遇到一个问题,php是单线,无法线
    swoole的。由于PHP语言不支持线,因此Swoole使模式。在模式下存在进内存隔离,在工作进内修改global全局变量和超全局变量时,在其他进是无效的。
    swoole的架构模式:线Reactor+Worker,因为reactor是基于epoll的,所以不难看出每个reactor,它可以来处理无数个连接请求。
    swooleSwoole使PHP语言,动态脚本语言,开发效率最佳,更适合应软件的开发;Go对与IO事件的处理是单线的,无法利核,吞吐量稍弱于swoole
    本文由java编入门栏目为大家介绍创建线的几种方式,希望可以帮助到大家。
    swoole的Swoft框架,​Swoft是一款基于 Swoole 扩展PHP微服务协框架。

    2019-12-16

    1074

    swoole完美支持PHP语言,使纯C语言编写,提供了PHP语言的异步线服务器。于是Swoole使搭建了一个异步服务器,提供异步响应,推送,定时任务等一系列工作是常见的选择。 ​
    swoole是异步的。swoolePHP的异步、并行、高性能网络通信引擎,使纯C语言编写,提供了PHP语言的异步线服务器,异步TCP/UDP网络客户端,异步MySQL等功能。
    PHP pcntl是一个可以利操作系统的fork系统调PHP线的进控制扩展,当使fork系统调后执行的代码将会是并行的,pcntl仅适于Linux平台的CLI模式下使

    2019-12-11

    1165

    Swoole使纯C语言编写的,Swoole提供了PHP语言的异步线服务器、异步TCP/UDP网络客户端、异步MySQL、异步Redis、数据库连接池、AsyncTask、消息队列、毫秒定时器、异步文件读写
    swoole是一个C语言编写的php扩展,能网络层的很功能,能使PHP开发人员编写高性能的异步并发TCP、UDP、Unix Socket、HTTP,WebSocket服务。

    2019-12-16

    670

    swoole门槛高,Swoole是给高手的,门槛比较高,需要使者有深厚的功底。

    2019-12-16

    1280

    Swoole4可以使完全同步的代码异步序,PHP代码无需额外增加任何关键词,底层自动进行协调度,异步IO。
    swoole是一个面向生产环境的PHP异步网络通信引擎,是使纯C语言编写的,提供了种通信协议的异步IO服务器和客户端;Swoole2.0还支持了类似Go语言的协 ,可以使完全同步的代码异步
    PHP 的redis扩展是阻塞式 IO ,使订阅/发布模式时,会导致整个进进入阻塞。因此必须使Swoole\Redis异步客户端来

    专题推荐

    推荐视频教程
  • PHP文件基础操作PHP文件基础操作
  • PHP开发免费公益直播课PHP开发免费公益直播课
  • Thinkphp6.0正式版视频教程Thinkphp6.0正式版视频教程
  • PHP快速操控Excel之PhpSpreadsheetPHP快速操控Excel之PhpSpreadsheet
  • 视频教程分类