QPM全名是 Quick Process Management Framework for PHP. PHP 是强大的web开发语言,以致于你们经常忘记PHP 能够用来开发健壮的命令行(CLI)程序以致于daemon程序。 而编写daemon程序免不了与各类进程管理打交道。QPM正是为简化进程管理而开发的类库。git
QPM的项目地址是: https://github.com/Comos/qpm github
如下是用QPM编写多进程程序的小例子。web
//定义 mission1:每隔3秒打印一次进程信息, 无限循环。 $mission1 = function() { while(true) { echo "---mission 1, pid:".posix_getpid()."\n"; sleep(3); } }; //定义 mission2:打印信息后 3秒后退出。 $mission2 = function() { echo "+++mission 2,pid:".posix_getpid()."\n"; sleep(3); }; //配置: mission 1 和mission 2 同时在子进程中执行。mission 1 只容许在一个子进程中执行,mission 2 则容许2个子进程并行执行。 $config = [ ['runnableCallback'=>$mission1], ['runnableCallback'=>$mission2, 'quantity'=>2] ]; // 使用multiGroupOneForOne 类型的supervisor 启动任务,意味着同组配置,当一个子进程退出后,会当即重启新的子进程继续执行任务。 qpm\supervisor\Supervisor::multiGroupOneForOne($config)->start();
到目前为止,QPM实现了fork的面向对象的写法,极大的简化了fork代码的可读性;同时实现了一系列Supervisor的用法,能够帮助开发者编写健壮的多进程程序。 在将来的版本里,计划逐步开发出信号处理和跨进程通迅的模块。框架
关于 QPM的使用,能够参考:ui