xingwenge / multi-process
Multi-process task manager.
v1.0.2
2021-11-03 05:50 UTC
Requires
- php: >=7.1
- ext-swoole: >=4.3.2
- doctrine/annotations: ^1.11.0
- hassankhan/config: ^2.0.0
- monolog/monolog: ^1.0.0
- php-di/php-di: ^6.0.0
- symfony/yaml: ^v3.4.0
README
基于swoole实现的多进程管理器,类似于supervisor.
为什么要写multi-process
php环境不用搭建其他多进程管理器
能够基于php的环境实现多进程管理,而不另外搭建其他多进程管理服务
php长进程存在的风险
基于php实现的长进程脚本,大部分业务是基于I/O的消息阻塞。
长时间运行的程序存在隐患
- 程序不当或者扩展带来的内存泄漏,长时间运行会导致内存溢出
- php程序依赖的服务代码有更新,业务功能不能及时更新
长进程程序能自重启能有效解决上述风险
引入使用
# git clone git@github.com:xingwenge/multi-process.git
# cd multi-process
# composer update
# cd bin
or
# composer require xingwenge/multi-process # mkdir multi-process && cd multi-process # cp -r ../vendor/xingwenge/multi-process/bin/* .
运行demo
// 修改demo 进程任务. redis连接配置、队列名称 # vi ./demo/redis-queue-pop.php // redis 队列推送 # vi ./demo/redis-queue-push.php // redis I/O阻塞,队列拉取 // 修改 config.yaml 配置文件,配置进程运行路径 // 运行demo. # php ./multiprocessd -c config.yaml // 推送数据到队列 # php ./demo/redis-queue-push.php // 平滑结束 # php ./multiprocessctl -c config.yaml -s quit // 停止 # php ./multiprocessctl -c config.yaml -s stop
依赖
- swoole
示例程序
配置文件
./bin/config.yaml
settings: workDir: /tmp/multi-process # 工作目录,存放进程id、日志 programs: Demo: # 进程名称 bin: /usr/local/php/bin/php # 进程运行路径 binArgs: # 参数 - /data/www/multiprocess/bin/demo/redis-queue-pop.php startSecs: 3 # 进程运行最小时长 startRetries: 3 # 程序运行失败重试的最大次数
启动
./bin/multiprocessd -c ./bin/config.yaml
平滑结束
./bin/multiprocessctl -c ./bin/config.yaml -s quit
停止
./bin/multiprocessctl -c ./bin/config.yaml -s stop
通过进程管理器创建的进程,阻塞拉取redis队列,并显示消息