使用Supervisor创建健壮的多进程程序

技术文档网 2021-04-19

多进程程序在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的 执行相同任务的进程树。

    //准备子进程要执行的任务:每个子进程每隔1秒打印一次PID,共打印10次
    $run = function() {
        $i = 10;
        while(--$i) {
                echo "[$i]PID:".posix_getpid()."\n";
                sleep(1);
        }
    };
    //准备supervisor配置:执行子进程任务函数 和 并发的子进程数量。
    $config = ['worker'=>$run, 'quantity'=>3];
    //创建Supervisor并启动。
    Comos\Qpm\Supervision\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秒后退出,父进程会重新派生新的子进程。

相关文章

  1. supervisor使用教程

    一、安装 1:easy_install 安装: easy_install supervisor 2:pip 安装: pip install supervisor 3:Debian / Ubuntu

  2. gitlab的ssh key不生效的问题

    在用 gitlab 的管理代码时发现一个问题:如果用 http 协议,每次 push 的时候都需要输入用户名和密码,如果 用 ssh 协议,先要生成公钥: ssh-keygen -t rsa -C

  3. UOJ安装指南

    这是一个UOJ的docker版本。在安装之前,请确认Docker已经安装在您的操作系统中。这个docker的映像是64位的版本,在32位的系统上安装可能会出现错误。 安装 请先下载 JDK7u76

  4. untu14.04下创建用户并赋予执行sudo命令的权限

    untu14.04下创建用户并赋予执行sudo命令的权限 创建用户:adduser +用户名(该命令在home下生成用户目录并创建用户) 1. 切换到root用户下 2. /etc/sud

  5. 如何查看当前apache的工作模式prefork worker还是event模式?

    查看apache工作模式 $ apachectl -V (注:apachectl可理解为apache control,其实是一段bash脚本) Server version: Apache/2.4.

随机推荐

  1. supervisor使用教程

    一、安装 1:easy_install 安装: easy_install supervisor 2:pip 安装: pip install supervisor 3:Debian / Ubuntu

  2. gitlab的ssh key不生效的问题

    在用 gitlab 的管理代码时发现一个问题:如果用 http 协议,每次 push 的时候都需要输入用户名和密码,如果 用 ssh 协议,先要生成公钥: ssh-keygen -t rsa -C

  3. UOJ安装指南

    这是一个UOJ的docker版本。在安装之前,请确认Docker已经安装在您的操作系统中。这个docker的映像是64位的版本,在32位的系统上安装可能会出现错误。 安装 请先下载 JDK7u76

  4. untu14.04下创建用户并赋予执行sudo命令的权限

    untu14.04下创建用户并赋予执行sudo命令的权限 创建用户:adduser +用户名(该命令在home下生成用户目录并创建用户) 1. 切换到root用户下 2. /etc/sud

  5. 如何查看当前apache的工作模式prefork worker还是event模式?

    查看apache工作模式 $ apachectl -V (注:apachectl可理解为apache control,其实是一段bash脚本) Server version: Apache/2.4.