PHP使用swoole实现多线程爬虫[通俗易懂]

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实现多线程爬虫[通俗易懂]作为对比,单线程结果:

PHP使用swoole实现多线程爬虫[通俗易懂]

PHP使用swoole实现多线程爬虫[通俗易懂]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111933.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月12日 下午9:00
下一篇 2022年2月12日 下午9:00


相关推荐

  • java集合类面试题

    java集合类面试题java集合类面试题1.请聊一下java的集合类,以及在实际项目中你是如何用的?注意说出集合体系,常用类,接口,实现类加上你所知道的高并发集合类,JUC在实际项目中引用,照实说就好了2.集合类是怎么解决高并发中的问题?线程非全的集合类ArrayListLinkedListHashSetTreeSetHashMapTreeMap实际开发中我们自己用这样的集合最多,因为一般我们自己写的业务代码中,不太涉及到多线程共享同一个集合的问题线程安全的集合类VectorHashTable

    2022年7月9日
    24
  • ServletContextListener的用法和实例

    ServletContextListener的用法和实例1)ServletContextListener:ServletContextListener能监听到你的应用程序的启动和销毁。例2.2.1.1packagecom;importjavax.servlet.ServletContext;importjavax.servlet.ServletContextEvent;importjavax.servlet.ServletCont…

    2022年4月30日
    54
  • 视觉SLAM——特征点法与直接法对比以及主流开源方案对比 ORB LSD SVO DSO

    视觉SLAM——特征点法与直接法对比以及主流开源方案对比 ORB LSD SVO DSO单目视觉SLAM可以根据其前端视觉里程计或是后端优化的具体实现算法进行分类:前端可以分为特征点法与直接法,后端可以分为基于滤波器和基于非线性优化。其中在后端上目前已经公认基于非线性优化的方法在同等计算量的情况下,比滤波器能取得更好的结果。而前端的两种方法则各有优劣。本文将具体分析直接法相较于特征点法的优劣处,并具体介绍目前主流的开源方案,以供大家参考。

    2022年5月13日
    47
  • 如何制作一个简单的网页(二)_简单的个人网页

    如何制作一个简单的网页(二)_简单的个人网页使用HTML和CSS来制作一个简单的网页前言一、HTML1.1常见元素介绍1.2借助工具,浏览器开发者工具二、实现个人名片1.基本框架2.使用CSS美化1.CSS书写位置1、以元素的style属性来指定(内联样式)2、以style标签包裹(内部样式)3、以外部文件的方式 (外部样式)2.CSS中的选择器1.标签选择器2.id选择器3.类选择器4.子元素选择器前言HTML负责描述了网页的整体骨架CSS负责描述了页面样式利用其完成一个简单的个人建立网页。一、HTMLHTML不是

    2022年10月10日
    4
  • TTL232和RS232的区别

    逻辑电平定义不同:TTL232的0是用0v表示。1是用5V表示。RS232的0是用+3V–+15V表示,1是用-3V—15V表示。接口一般都用三根线,1:地线。2:写入。3:导出。他们不可直连,中间需接电平转接板,…

    2022年4月9日
    64
  • ADB常用命令大全

    ADB常用命令大全命令参数功能 adbdevices 列出当前连接的设备列表 adbserver strat 启动 adb 服务 adbkill server 停止 adb 服务 adbconnect 如果是 USB 连接 直接会连接 ADB 如果是想通过网络连接 则需要在同一个局域网 通过 IP 连接 adbdisconnec 断开连接设备 adbinstall 安装 APP 如果 apk 已安装 则覆盖安装 r 如果 apk 已安装 则重

    2026年3月16日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号