• swoole http_server 多进程并使用多进程处理消息


    <?php
    $http = new swoole_http_server("0.0.0.0", 9511);
    $http->set([
                     'worker_num' =>3, //工作进程数
                    'daemonize' => true, //是否后台运行
                ]);
    $http->on('request','Run');
    
    function Run($request, $response)
    {
        $url=$request->server['request_uri'];
        if($url!='/favicon.ico'){
            $m = [1,2,3,4,5,6,7,8,9];
            p($m);
        }
        $response->end('首页');
    }
    
    function p($messages)
    {
        $worker_num = 5;
        $process_pool = [];
    
        $process= null;
        $pid = posix_getpid();
        $customMsgKey = 1;
        $mod = 2 | swoole_process::IPC_NOWAIT;//这里设置消息队列为非阻塞模式
    
        for($i=0;$i<$worker_num; $i++) {
            $process=new swoole_process('sub_process');
            $process->useQueue($customMsgKey, $mod);
            $process->start();
            $pid = $process->pid;
            $process_pool[$pid] = $process;
        }
        //由于所有进程是共享使用一个消息队列,所以只需向一个子进程发送消息即可
        $process = current($process_pool);
        foreach ($messages as $msg) {
            $process->push($msg);
        }
    
    }
    
    
    function sub_process(swoole_process $worker)
    {
            sleep(1); //防止父进程还未往消息队列中加入内容直接退出
            // echo "worker ".$worker->pid." started".PHP_EOL;
            while($msg = $worker->pop()){
                echo $msg;
                if ($msg === false) {
                    break;
                }
                $sub_pid = $worker->pid;
                // echo "[$sub_pid] msg : $msg".PHP_EOL;
                file_put_contents(__DIR__.'/a.txt',"[$sub_pid] msg : $msg".PHP_EOL,FILE_APPEND);
                sleep(1);//这里的sleep模拟任务耗时,否则可能1个worker就把所有信息全接受了
            }
            // echo "worker ".$worker->pid." exit".PHP_EOL;
            $worker->exit(0);
    }
    
    $http->start();
  • 相关阅读:
    Python创建空DataFrame及添加行数据
    Python读取Excel文件
    Python拆分DataFrame
    Python中识别DataFrame中的nan
    Python线性回归算法【解析解,sklearn机器学习库】
    Python鸢尾花分类实现
    Python机器学习入门
    Python使用map,reduce高阶函数模拟实现Spark的reduceByKey算子功能
    Python参数传递(传值&传引用)
    Python迭代器
  • 原文地址:https://www.cnblogs.com/qqlong/p/9407839.html
Copyright © 2020-2023  润新知