php Swoole多线程爬虫 六

333 阅读2分钟

「这是我参与2022首次更文挑战的第20天,活动详情查看:2022首次更文挑战

课程背景

  • 我作为一个PHP工程师 虽然这几年PHP没落了
  • 但我还是有责任补充一些PHP方面的高级教程
  • 掘金粑粑开始更文奖励了 不能白白拿人家的奖励
  • 应该发表一些高层次的PHP的技术文章 别让PHP倒了

正文开始

前面我们用单线程完成了爬取图片的底层业务,只是单线程速度太慢。不是我们所需要的。所以我们尝试使用多线程。

1 介绍

  • php其实本来就是个脚本语言,对于请求跟响应是不存在多线程的。所以如果要弄成多线程,那就只能在php命令行中。
  • php实现多线程有两种方式,一种是官方提供的进程控制pcntl方法。还有就是php神器Swoole了。
  • 因为多线程这部分内容比较复杂,也是一个瓶颈吧。涉及到很多计算机线程,同步异步方面的知识。所以如果你不是很懂,建议去这个文档看一看,一定会对你有帮助的。EsaySwoole文档

2 创建多个先线程。

开启一个线程的方法

    //创建单个线程
    $process = new swoole_process(function($pro){
        var_dump($pro->pid);
    },false);
    $process->start();
    
    swoole_process::wait(); //等待执行完成

开始多个线程就是上面的代码循环几遍

<?php
for ($i=0; $i < 10; $i++) { 
    $process = new swoole_process(function($pro){
        var_dump($pro->pid);
    },false);
    $process->start();
}

for ($i=0; $i < 10; $i++) { 
    swoole_process::wait();
}

开启进程具体需要做的事情,就是写在闭包中。闭包中定义好要执行的操作以后,掉用当前进程的 start()方法,就可以看起当前进程。

我们做爬取的思路就是提前生成好了需要爬取的连接,也就是把需要完成的工作确定了。剩下的就是分配给相应的线程进行完成即可。