分享一个php常驻内存多进程任务的扩展

2024-05-09 12:12

本文主要是介绍分享一个php常驻内存多进程任务的扩展,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

最近在摸鱼的时候发现一个PHP常驻内存多进程任务扩展包:EasyTask: PHP常驻内存多进程任务管理器,支持定时任务(PHP resident memory multi-process task manager, supports timing tasks) (gitee.com),支持php使用多线程处理任务。之前我也写过使用workman开启多线程处理任务的文章:

Thinkphp+workman+redis实现多进程异步任务处理_tp6 workerman异步-CSDN博客

Laravel+workman+redis实现多进程异步任务处理_laravel workerman-CSDN博客

相比workman和swoole, 用法差不多,但是EasyTask对于windows环境更加友好,开发起来也更加简单灵活。

使用

安装就不多废话了,直接参照官方文档安装即可,没有什么困难。

直接用thinkphp5.1框架写一个 EasyTask 开启多进程消费redis队列的测试栗子看看效果。

  • 1.创建队列

    <?phpnamespace app\index\controller;use think\Controller;class Index extends Controller
    {//新增队列数据public function addQueue(){$redis = new \Redis();$redis->connect('127.0.0.1', 6379);for ($i = 0; $i < 10; $i++) {$redis->rPush('test-queue', $i);}echo 'success';}}
    
  • 2.创建命令行和任务

    <?phpnamespace app\command;use think\console\Command;
    use think\console\Input;
    use think\console\input\Argument;
    use think\console\Output;class Task extends Command
    {protected function configure(){//设置名称为task$this->setName('task')//增加一个命令参数->addArgument('action', Argument::OPTIONAL, "action")->addArgument('force', Argument::OPTIONAL, "force");}protected function execute(Input $input, Output $output){//获取输入参数$action = trim($input->getArgument('action'));$force = trim($input->getArgument('force'));// 配置任务$task = new \EasyTask\Task();$task->setRunTimePath('./runtime/');//监听redis队列$redis = new \Redis();$redis->connect('127.0.0.1', 6379);$task->addFunc(function () use ($redis, $task) {echo '进程空闲中...'.PHP_EOL;while (1){//循环读取redis队列$data = $redis->lPop('test-queue');if (empty($data)){break;}echo '消费队列:' . $data . PHP_EOL;//模拟耗时任务sleep(5);}}, 'request', 5, 3);// 根据命令执行if ($action == 'start'){$task->start();}elseif ($action == 'status'){$task->status();}elseif ($action == 'stop'){$force = ($force == 'force'); //是否强制停止$task->stop($force);}else{exit('Command is not exist');}}
    }
    
  • 3.在application/command.php注册命令行

    <?php
    return ['app\command\Task',
    ];
    
  • 4.访问第一步的接口将数据添加到redis队列

    php .\public\index.php /index/index/addQueue
    
  • 5.启动任务 EasyTask

    php think task start
    

我这里开启了3个进程,每个进程每隔5秒消费一个队列,效果图如下

使用效果还是不错的

这篇关于分享一个php常驻内存多进程任务的扩展的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/973382

相关文章

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

最新Spring Security的基于内存用户认证方式

《最新SpringSecurity的基于内存用户认证方式》本文讲解SpringSecurity内存认证配置,适用于开发、测试等场景,通过代码创建用户及权限管理,支持密码加密,虽简单但不持久化,生产环... 目录1. 前言2. 因何选择内存认证?3. 基础配置实战❶ 创建Spring Security配置文件

OpenCV在Java中的完整集成指南分享

《OpenCV在Java中的完整集成指南分享》本文详解了在Java中集成OpenCV的方法,涵盖jar包导入、dll配置、JNI路径设置及跨平台兼容性处理,提供了图像处理、特征检测、实时视频分析等应用... 目录1. OpenCV简介与应用领域1.1 OpenCV的诞生与发展1.2 OpenCV的应用领域2

java内存泄漏排查过程及解决

《java内存泄漏排查过程及解决》公司某服务内存持续增长,疑似内存泄漏,未触发OOM,排查方法包括检查JVM配置、分析GC执行状态、导出堆内存快照并用IDEAProfiler工具定位大对象及代码... 目录内存泄漏内存问题排查1.查看JVM内存配置2.分析gc是否正常执行3.导出 dump 各种工具分析4.

一文解密Python进行监控进程的黑科技

《一文解密Python进行监控进程的黑科技》在计算机系统管理和应用性能优化中,监控进程的CPU、内存和IO使用率是非常重要的任务,下面我们就来讲讲如何Python写一个简单使用的监控进程的工具吧... 目录准备工作监控CPU使用率监控内存使用率监控IO使用率小工具代码整合在计算机系统管理和应用性能优化中,监

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法