Swoole 进程管理

Posted xiaoliwang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swoole 进程管理相关的知识,希望对你有一定的参考价值。

用法:

$process = new swoole_process(function(){
    //这里写业务代码
},true)
//开启进程,返回进程pid
$pid = $process->start();

实例化时传入第二个参数为 true 时,则表示输出内容到管道

//模拟用进程管理同时请求多个url
$workers = [];
$urls = [
    ‘http://www.baidi.com‘,
    ‘http://www.google.com‘,
    ‘http://www.sina.com.cn‘,
    ‘http://www.qq.com‘,
    ‘http://www.cnblog.com‘
];

foreach ($urls as $i => $url) {
    $process = new swoole_process(function($worker) use($urls,$i){
        $content = curlData($urls[$i]);
        //向管道中写入数据
        $worker->write($content);
        //echo $content;   //使用echo可以达到一样的效果
    },true);
    $pid = $process->start();
    //将创建好的进程保存在数组中
    $workers[$pid] = $process;
}

// ---------- 等待所有进程结束后再执行后面代码 ---------

foreach ($workers as $process) {
    //从管道中读取数据
    echo $process->read();
    //回收子进程
    $process::wait();
}

//模拟请求数据过程
function curlData($url){
    sleep(1);
    return $url ."SUCCESS" . php_EOL;
}

上面代码执行总耗时 1s ,由此可见多进程大大提高了效率

此外,在创建的子进程中还可以调用外部程序

$process = new swoole_process(‘callback_function‘, true); 
$pid = $process->start(); 
function callback_function(swoole_process $worker) 
{ 
    $worker->exec(‘/usr/local/bin/php‘,array(__DIR__.‘/swoole_server.php‘)); 
} 
  

注意:

exec()方法第一个参数为执行文件的路径,必须为绝对路径
第二个参数为数组,为执行文件的数组

以上是关于Swoole 进程管理的主要内容,如果未能解决你的问题,请参考以下文章

Swoole系列3.5进程池与进程管理器

Swoole系列3.3单进程管理Process

swoole架构分析

swoole(PHP异步网络通信引擎)的结构和运行流程

swoole_proces实现多进程

Swoole 理解manager进程和worker进程的启动顺序,以及演示如何停止或者重启服务端。