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

  1. <?php

  2. $s_time = time();

  3. echo '开始时间:'.date('H:i:s',$s_time).PHP_EOL;

  4. //进程数

  5. $work_number=6;

  6.  

  7. //

  8. $worker=[];

  9.  

  10. //模拟地址

  11. $curl=[

  12.     'https://blog.csdn.net/feiwutudou',

  13.     'https://wiki.swoole.com/wiki/page/215.html',

  14.     'http://fanyi.baidu.com/?aldtype=16047#en/zh/manager',

  15.     'http://wanguo.net/Salecar/index.html',

  16.     'http://o.ngking.com/themes/mskin/login/login.jsp',

  17.     'https://blog.csdn.net/marksinoberg/article/details/77816991'

  18. ];

  19.  

  20. //单线程模式

  21. // foreach ($curl as $v) {

  22. // echo curldeta($v);

  23. // }

  24.  

  25. //创建进程

  26. for ($i=0; $i < $work_number; $i++) {

  27.     //创建多线程

  28.     $pro=new swoole_process(function(swoole_process $work) use($i,$curl){

  29.         //获取html文件

  30.         $content=curldeta($curl[$i]);

  31.         //写入管道

  32.         $work->write($content.PHP_EOL);

  33.     },true);

  34.     $pro_id=$pro->start();

  35.     $worker[$pro_id]=$pro;

  36. }

  37. //读取管道内容

  38. foreach ($worker as $v) {

  39.     echo $v->read().PHP_EOL;

  40. }

  41.  

  42. //模拟爬虫

  43. function curldeta($curl_arr)

  44. { //file_get_contents

  45.     echo $curl_arr.PHP_EOL;

  46.     file_get_contents($curl_arr);

  47. }

  48.  

  49. //进程回收

  50. swoole_process::wait();

  51.  

  52. $e_time = time();

  53. echo '结束时间:'.date('H:i:s',$e_time).PHP_EOL;

  54.  

  55. echo '所用时间:'.($e_time-$s_time).'秒'.PHP_EOL;

  56. ?>

多线程执行结果:

PHP使用swoole实现多线程爬虫_经验分享作为对比,单线程结果:

PHP使用swoole实现多线程爬虫_经验分享_02