• 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()方法第一个参数为执行文件的路径,必须为绝对路径
    第二个参数为数组,为执行文件的数组
  • 相关阅读:
    vi/vim 如何添加和删除多行注释
    linux报错:命令未找到
    删除远程分支的方法
    k-vim常见快捷键
    [转]常见linux命令用法介绍
    python库termcolor用法
    gitignore样例解析
    [转]"git rm" 和 "rm" 的区别
    python中的slice用法
    牛客网linux试题-错误整理-20170914
  • 原文地址:https://www.cnblogs.com/xiaoliwang/p/9276954.html
Copyright © 2020-2023  润新知