分享一个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.创建队列

    <?php
    
    namespace 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.创建命令行和任务

    <?php
    
    namespace 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秒消费一个队列,效果图如下

使用效果还是不错的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/605892.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文心一言 VS 讯飞星火 VS chatgpt (252)-- 算法导论18.2 5题

五、因为叶结点无需指向孩子结点的指针&#xff0c;那么对同样大小的磁盘页面&#xff0c;可选用一个与内部结点不同的(更大的) t 值。请说明如何修改 B 树的创建和插人过程来处理这个变化。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 当我们在B树&#xff…

Kafk设计篇01(设计动机+持久化)

背景 本篇文章基于最新版本&#xff1a;kafka 3.7&#xff0c;其他版本的设计&#xff0c;请参考官网&#xff1a; https://kafka.apache.org/documentation/设计动机 任何组件都有它存在的必要&#xff0c;必然是要解决某一类问题的。我们来看看kafka设计的初衷如何。 kaf…

Python---Numpy万字总结(1)

NumPy的应用&#xff08;1&#xff09; Numpy 是一个开源的 Python 科学计算库&#xff0c;用于快速处理任意维度的数组。Numpy 支持常见的数组和矩阵操作&#xff0c;对于同样的数值计算任务&#xff0c;使用 NumPy 代码简洁&#xff0c;在性能上也远远优于原生 Python&#…

温度表程序里的公式推算

今天要改个温度表的程序&#xff0c;但是好几年没搞过了。所以程序里面的各种数字怎么算出来的都忘记了。花了半天才想起来&#xff0c;所以记录在这里&#xff0c;下次再忘记了就来翻一下。。 下次应该看到这个能想起来的把。

【论文笔记】KAN: Kolmogorov-Arnold Networks 全新神经网络架构KAN,MLP的潜在替代者

KAN: Kolmogorov-Arnold Networks code&#xff1a;https://github.com/KindXiaoming/pykan Background ​ 多层感知机&#xff08;MLP&#xff09;是机器学习中拟合非线性函数的默认模型&#xff0c;在众多深度学习模型中被广泛的应用。但MLP存在很多明显的缺点&#xff1a;…

nginx--系统参数优化telenct

系统参数 在生产环境中&#xff0c;根据自己的需求在/etc/sysctl.conf来更改内核参数 net.ipv4.ip_nonlocal_bind 1 允许非本地IP地址socket监听 net.ipv4.ip_forward 1 开启IPv4转发 net.ipv4.tcp_timestamps 0 是否开启数据包时间戳 net.ipv4.tcp_tw_reuse 0 端⼝口复⽤…

ctfshow之_萌新web9至web10

一、访问在线靶场ctfshow 1、web9 如下图所示&#xff0c;进入_萌新赛的web9问题&#xff0c;题目提醒flag在config.php中&#xff1a; 如上图所示&#xff0c;可以get传参&#xff0c;且传入的参数需要正则匹配system、exec、highlight&#xff0c;且不区分大小写&#xff0…

分类任务的基础学习

1.什么是分类&#xff1f; 2.局限性&#xff1a; 当样本量逐渐变大的时候&#xff0c;准确率会下降——>因为线性回归曲线距离我们的原点越远&#xff0c;预测就会开始不准确&#xff0c;因为 x前面的倍数就会越来越小&#xff0c;这就导致了样本量变大&#xff0c;但是那些…

安卓开发--环境配置

本次项目选择使用 Andrio Studio 进行开发。虽然这款软件版本更新也很快。不过开发一款APP的技术流程是大差不差的。我几年前的安卓笔记放到现在还是能用。 现在CSDN网上写一个笔记留作以后参考&#xff0c;开始吧&#xff01;&#xff01;&#xff01; 1 安装 Andrio Studio …

Jmeter性能测试(五)

一、Jmeter参数化常用方式 1、CSV 数据文件设置 2、查询数据库(JDBC Connection Configuration) 二、CSV 数据文件设置 1、准备一个txt文件(不需要写表头&#xff0c;直接写你要用的数据就行了&#xff0c;多个字段用英文逗号隔开) 2、添加一个CSV 数据文件设置(放全局最上…

Vue从入门到实战Day02

一、指令补充 1. 指令修饰符 通过 “.”指明一些指令后缀&#xff0c;不同后缀封装了不同的处理操作 -> 简化代码 键盘按键修饰符 如&#xff1a;keyup.enter -> 键盘回车监听 常用按键修饰符别名 别名修饰符键值修饰符对应按键.delete.8/.46回格 / 删除.tab.9制表.e…

01-单片机商业项目编程,从零搭建低功耗系统设计

一、引言 这是关于《单片机商业编程之从零搭建低功耗系统》的第一篇章&#xff0c;个人善忘&#xff0c;平常项目设计当中的一些思路&#xff0c;以前年轻的时候习惯性的录制成视频&#xff0c;也算是当作是自己的笔记&#xff0c;无奈现在喉咙实在扛不住&#xff0c;因此先尝试…

Linux下的I2C通信

I2C通信: 一.硬件初识: IIC(inter-intergrated-Circu):内部集成总线 四线通讯:SCL,SDA,GND,VCC,串行,半双工 I2C 总线是同步,串行,半双工通信总线。 I2C 总线由时钟线 SDA 和 SCL 两根信号线构成。并且都有上拉电阻。确保总线空闲状态为高电平。 I2C 总线支持多…

四川古力未来科技抖音小店:安全便捷购物新体验

在这个数字化快速发展的时代&#xff0c;网络购物已经成为人们生活中不可或缺的一部分。四川古力未来科技抖音小店以其高度的安全性&#xff0c;为广大消费者提供了一个值得信赖的购物平台。在这里&#xff0c;我们可以享受到安全便捷的购物体验&#xff0c;畅游科技的海洋。 一…

java回调机制

目录 一、简介二、示例2.1 同步回调2.2 异步回调2.3 二者区别 三、应用场景 一、简介 在Java中&#xff0c;回调是一种常见的编程模式&#xff0c;它允许一个对象将某个方法作为参数传递给另一个对象&#xff0c;以便在适当的时候调用该方法。 以类A调用类B方法为例: 在类A中…

CTF-reverse,逆向分析,对“左移4或右移4,即(x<<4) | (x >>4)的加密探讨

博主在刷题过程中遇上这样一个有意思的加密&#xff08;如下图&#xff09;&#xff0c;苦苦思索其逆向运算&#xff0c;被硬控了很久&#xff0c;也没搜到什么资料来解释这个问题&#xff08;也许是太简单&#xff1f;&#xff1f;蒟蒻博主怀疑人生……&#xff09; 经过博主不…

2024最新版JavaScript逆向爬虫教程-------基础篇之无限debugger的原理与绕过

目录 一、无限debugger的原理与绕过1.1 案例介绍1.2 实现原理1.3 绕过debugger方法1.3.1 禁用所有断点1.3.2 禁用局部断点1.3.3 替换文件1.3.4 函数置空与hook 二、补充2.1 改写JavaScript文件2.2 浏览器开发者工具中出现的VM开头的JS文件是什么&#xff1f; 一、无限debugger的…

正点原子Linux学习笔记(七)在 LCD 上显示 png 图片

在 LCD 上显示 png 图片 21.1 PNG 简介21.2 libpng 简介21.3 zlib 移植下载源码包编译源码安装目录下的文件夹介绍移植到开发板 21.4 libpng 移植下载源码包编译源码安装目录下的文件夹介绍移植到开发板 21.5 libpng 使用说明libpng 的数据结构创建和初始化 png_struct 对象创建…

win11个性化锁屏界面怎么关闭?

win11个性化锁屏界面关闭方法对于win11用户来说&#xff0c;关闭个性化锁屏界面是一个常见问题。本文将由php小编苹果详细介绍如何执行此操作&#xff0c;分步指导并提供操作截图。继续阅读以了解具体步骤。 win11个性化锁屏界面关闭方法 第一步&#xff0c;点击底部Windows图…

企信通_企信通短信群发平台

现代社会&#xff0c;随着互联网技术的快速发展&#xff0c;传统的营销方式已经无法满足企业对于市场开拓和客户沟通的需求。群发作为一种高效、低成本的营销手段&#xff0c;逐渐成为了众多企业的首选。而在众多群发平台中&#xff0c;嘀迈信息企信通公司凭借其稳定可靠的服务…