zoukankan      html  css  js  c++  java
  • 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()方法第一个参数为执行文件的路径,必须为绝对路径
    第二个参数为数组,为执行文件的数组
  • 相关阅读:
    iOS 9之后Url链接的NSUTF8StringEncoding转码实现
    iOS实现应用更新及强制更新
    Objective-C代码简写
    Mac下使用数据库将Excel数据转换存入.plist
    iOS开发之图片压缩实现
    iOS键盘事件实现、控制
    iOS 轻击、触摸和手势的检测
    使用CocoaPods时遇到 Permission denied 问题
    2016-3-1 Mac下使用Hexo搭建Blog
    2016-3-1 安装Hexo过程中遇到的问题
  • 原文地址:https://www.cnblogs.com/xiaoliwang/p/9276954.html
Copyright © 2011-2022 走看看