当前位置: 首页 > news >正文

学习路之PHP --TP6异步执行功能 (无需安装任何框架)

学习路之PHP --异步执行功能 (无需安装任何框架)

  • 简介
  • 一、工具类
  • 二、调用
  • 三、异步任务的操作
  • 四、效果:

简介

执行异步任务是一种很常见的需求,如批量发邮箱,短信等等执行耗时任务时,需要程序异步执行,给用户带来好的体验。

在php异步执行代码就很尬尴,不像java 可以创建多线程,在php中也可以用pcntl_fork()实现创建子进程,来实现异步,但这样可能会产生很多僵尸进程。其他的方式借助框架实现,如优秀的swoole框架,本文介绍无需安装如何框架扩展,php自带的方式处理下面直接上代码,我用的thinkphp6

一、工具类

extend\util\AsyncHook.php,代码如下

<?php
namespace util;class AsyncHook
{private static $hook_list = array();private static $hooked = false;/*** hook函数fastcgi_finish_request执行** @param callback $callback* @param array $params*/public static function hook($callback, $params = []){trace('这里是'.__CLASS__.'\\'.__FUNCTION__);self::$hook_list[] = array('callback' => $callback, 'params' => $params);if (self::$hooked == false) {self::$hooked = true;register_shutdown_function(array(__CLASS__, '__run'));}}/*** 由系统自动调用:支持win10:phpstudy** @return void*/public static function __run(){if (function_exists('fastcgi_finish_request')) {fastcgi_finish_request();}if (empty(self::$hook_list)) {return;}foreach (self::$hook_list as $hook) {$callback = $hook['callback'];$params   = $hook['params'];call_user_func_array($callback, $params);}}}

二、调用

route\app.php

Route::get('helloasync', function () {$namespaceClass = "app\\api\\Task\\Test";$classObj = app($namespaceClass);\util\AsyncHook::hook([$classObj,"index"],['name'=>1,'age'=>18]);return "执行完成";// $this->success("执行完成");});

三、异步任务的操作

<?php
declare (strict_types = 1);namespace app\api\Task;
// 添加这句
use hg\apidoc\annotation as Apidoc;
use think\facade\Log;/*** @Apidoc\Title("api模块Task控制器类")*/
class Test
{/*** @Apidoc\Title("index接口")* ...*/ public function index(...$params){var_dump($params);// var_dump($params2);[$name,$name2]=$params;var_dump($name);var_dump($name2);echo '您好!这是一个异步任务的操作'.__CLASS__.'\\'.__FUNCTION__;}
}

四、效果:

执行结果,会先’执行完成’,后执行hook中的Test index方法。
在这里插入图片描述

http://www.lryc.cn/news/543458.html

相关文章:

  • Uniapp 小程序复制、粘贴功能实现
  • seacmsv9注入管理员账号密码+orderby+limit
  • 多通道数据采集和信号生成的模块化仪器如何重构飞机电子可靠性测试体系?
  • 天润融通分析DeepSeek如何一键完成从PR接入,到真正的业务接入
  • 免费PDF工具
  • PyTorch 源码学习:GPU 内存管理之它山之石——TensorFlow BFC 算法
  • 【学写LibreCAD】1 LibreCAD主程序
  • Android Studio超级详细讲解下载、安装配置教程(建议收藏)
  • CDN与群联云防护的技术差异在哪?
  • 故障诊断 | Matlab实现基于DBO-BP-Bagging多特征分类预测/故障诊断
  • Linux-SaltStack配置
  • 内网渗透测试-Vulnerable Docker靶场
  • 云计算如何解决延迟问题?
  • 飞书webhook监控业务系统端口
  • 电脑键盘知识
  • Oracle23版本 创建用户 报 00959和65096错误解决办法
  • SAP-ABAP:使用ST05(SQL Trace)追踪结构字段来源的步骤
  • 《深度学习实战》第3集:循环神经网络(RNN)与序列建模
  • winfrom的progressBar 鼠标移上去显示 进度条的时间
  • 如何在WordPress网站中查看移动版本—快速预览与自定义设置
  • wordpress按分类ID调用最新、推荐、随机内容
  • excel单、双字节字符转换函数(中英文输入法符号转换)
  • 能不能用Ai来开发出一款APP?很早就想过能不能用Ai来开发出一款APP?
  • lattice hdl实现spi接口
  • 超过DeepSeek、o3,Claude发布全球首个混合推理模型,并将完成新一轮35亿美元融资...
  • AI如何通过大数据分析提升制造效率和决策智能化
  • Java和JavaScript的比较
  • 2. 在Linux 当中安装 Nginx(13步) 下载安装启动(详细说明+附加详细截图说明)
  • 大模型训练——pycharm连接实验室服务器
  • 实体机器人识别虚拟环境中障碍物