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()方法第一个参数为执行文件的路径,必须为绝对路径
    第二个参数为数组,为执行文件的数组
  • 相关阅读:
    ListView 操作
    Delphi 浏览器WebBrowser
    XE6 c++builder Edit垂直居中
    HTML 表格标签
    HTML 标签说明
    Ubuntu下如何解压缩zip,tar,tar.gz,tar.bz2文件
    Ubuntu 12.04下mysql的安装与配置
    Ubuntu12.04下apache服务器的安装也配置
    Ubuntu12.04下tomcat的安装与配置
    Ubuntu 12.04下jdk的安装与配置
  • 原文地址:https://www.cnblogs.com/xiaoliwang/p/9276954.html
Copyright © 2011-2022 走看看