使用Supervisor创建multi process多进程程序 v0.3 - Comos/qpm GitHub Wiki

本文档适用于 0.3.x版本,最新版本文档请访问wiki首页

多进程程序在Daemon开发中,有很多应用场景,比如并行任务处理等。

例如Nginx就采用了一个Master进程,挂载多个Worker子进程的方式运行。

 |-+= 34843 root nginx: master process nginx
   |--- 34912 nobody nginx: worker process
   |--- 34913 nobody nginx: worker process
   \--- 34914 nobody nginx: worker process

Supervisor 是监控者的意思,QPM中的Supervisor 用于帮助开发者快速构建高可用的多进程程序。

例子1: 使用Supervisor创建 1:3的 执行相同任务的进程树。

require_once 'qpm/supervisor/Supervisor.php';
//准备子进程要执行的任务:每个子进程每隔1秒打印一次PID,共打印10次
$run = function() {
    $i = 10;
    while(--$i) {
            echo "[$i]PID:".posix_getpid()."\n";
            sleep(1);
    }
};
//准备supervisor配置:执行子进程任务函数 和 并发的子进程数量。
$config = ['runnableCallback'=>$run, 'quantity'=>3];
//创建Supervisor并启动。
qpm\supervisor\Supervisor::oneForOne($config)->start();

产生的进程树如下:

    \-+= 37063 php one_for_one_supervision.php
      |--- 37064 php one_for_one_supervision.php
      |--- 37065 php one_for_one_supervision.php
      \--- 37066 php one_for_one_supervision.php

每个子进程执行10秒后退出,父进程会重新派生新的子进程。