php多进程异步抓取,高阶篇五 命令行异步多进程队列类的应用

# 高阶篇五 命令行异步多进程队列类的应用

>[info] 运行环境 推荐 Linux (win环境下我没有测试过)

>需要安装Redis

>

### 第一步 创建命令行运行文件

创建一个文件 继承WorkerCommand即可!

~~~

namespace app\base\command;

use mikkle\tp_worker\WorkerCommand;

/**

* Created by PhpStorm.

* Power by Mikkle

* QQ:776329498

* Date: 2017/6/12

* Time: 15:07

*/

class Mikkle extends WorkerCommand

{

}

~~~

>[danger] Ok!不要奇怪,其实就是代码这么少!

### 第二步 注册command文件

在app下面的command.php文件中写入

~~~

return [

'app\base\command\Mikkle',

];

~~~

### 第三步 启动命令行

在命令行界面 进入网站的根目录

~~~

php think mikkle

~~~

这样命令行就跑起来了

![](https://box.kancloud.cn/a092efc328be9d1a0baab9c018273186_477x143.png)

分一个窗口 运行命令查看运行状态

`ps -ef |grep mikkle | grep -v grep`

![](https://box.kancloud.cn/38c153ff8f0c665d96054676ef32b10e_413x31.png)

这样异步的命令行部分已经完成

### 第四步 编写异步队列执行类

>[danger]只要继承mikkle\tp_worker\WorkerBase即可

~~~

/**

* Created by PhpStorm.

* User: Mikkle

* QQ:776329498

* Date: 2017/8/2

* Time: 15:59

*/

namespace app\worker;

use mikkle\tp_worker\WorkerBase;

use think\Log;

class Test extends WorkerBase

{

protected function runHandle($data)

{

for ($i=1 ; $i<10;$i++){

$this->sleep(1);

echo '睡眠一秒';

}

Log::notice( "测试" );

}

}

~~~

>[info] 在这里我们只需要写命令行回调方法runHandle即可

>data的值是通过静态方法add添加

>

### 第五步 启动异步队列执行类

~~~

$data =[

"name"=>"mikkle"

];

$Result = \app\worker\Test::add( $data);

return $Result;

~~~

>[danger] Ok 搞定!

运行一下看效果

![](https://box.kancloud.cn/b25ae16f56f7a4b1f68431a4dc6e88bb_670x400.png)

>[info] 每次运行异步任务时候,命令行这边会创建全新的子进程执行该任务!执行结束后子进程自动关闭!

###测试效果

同时开启10个异步队列效果

![](https://box.kancloud.cn/735fd3c30ae01562d403e60130f21ef3_371x131.png)

程序会发起10个子进程进行处理不同的队列任务

### 循环任务示例

~~~

/**

* Created by PhpStorm.

* User: Mikkle

* QQ:776329498

* Date: 2018/2/23

* Time: 16:20

*/

namespace app\worker\auto;

use mikkle\tp_worker\CycleWorkBase;

use mikkle\tp_tools\Curl;

use think\Exception;

use think\Log;

class Cycle extends CycleWorkBase

{

protected function runHandle($data)

{

try{

while ( true ){

self::signWorking();

Curl::get( "http://www.mikkle.cn/");

$time = $this->getNextRunTime();

$this->sleep($time);

Log::notice("循环执行程序执行程序".time() );

}

}catch (Exception $e){

Log::notice( $e ->getMessage());

}

}

protected function getNextRunTime(){

if (time()

return 15;

}elseif(time()

return 180;

}elseif(time()

return 30;

}elseif(time()

return 15;

}

return 60;

}

}

~~~

### 异步钩子示例

>[info] 注册Hook文件 tags.php

~~~

'hook_test'=>[

"app\\base\\behavior\\worker\\Test",

],

~~~

>[info] 新建钩子文件 继承 mikkle\tp_worker\WorkerHookBase即可

~~~

/**

* Created by PhpStorm.

* User: Mikkle

* QQ:776329498

* Date: 2018/2/1

* Time: 9:10

*/

namespace app\base\behavior\worker;

use mikkle\tp_worker\WorkerHookBase;

use think\Log;

class Test extends WorkerHookBase

{

protected function runHandle($data)

{

for ($i=0 ; $i<10;$i++){

$this->sleep(1);

echo '睡眠一秒';

}

Log::notice( "测试" );

}

}

~~~

感谢大家关注 交流请加QQ群 321449759

![](https://box.kancloud.cn/3499008a08e64306c68873288092a057_286x340.png)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值