PHP判处重复延长队列执行时间

需求是这样:

14:00的时候,需要给1000个门店执行发券操作,有的门店需要发3个场景,开放平台的接口有请求频次限制,他是按照门店的场景发券需要间隔10秒。比如说,AB两个门店同时发a券,但不能 A门店同时发a、b券。

php 复制代码
$delay = 10; // 设置固定的间隔时间为10秒

        $previousExecutionTimes = []; // 用于记录每个s_id的上一个任务执行时间

        foreach ($data as $v) {

            $jobData = [
                's_id'    => $v['s_id'],
                'labelId' => $v['labelId']
            ];

            $s_id = $v['s_id'];
            // 检查之前是否有相同s_id的任务,如果有,就取其上一个执行时间,否则默认为当前时间
            $previousExecutionTime = isset($previousExecutionTimes[$s_id]) ? $previousExecutionTimes[$s_id] : time();

            $currentExecutionTime = time();
            $currentDelay = max($delay, $previousExecutionTime + $delay - $currentExecutionTime); // 计算当前任务的延迟时间,保证相同s_id的任务间隔为10秒
            $previousExecutionTimes[$s_id] = $currentExecutionTime + $currentDelay; // 更新当前s_id的上一个任务执行时间

            dump("time:{$currentDelay},s_id:{$s_id}");

            Queue::later($currentDelay, 'QueryValueadded@taskSubmit', $jobData, 'test');
        }
相关推荐
Fairy要carry4 分钟前
面试-GRPO强化学习
开发语言·人工智能
Liekkas Kono16 分钟前
RapidOCR Python 贡献指南
开发语言·python·rapidocr
张张努力变强23 分钟前
C++ STL string 类:常用接口 + auto + 范围 for全攻略,字符串操作效率拉满
开发语言·数据结构·c++·算法·stl
xyq202425 分钟前
Matplotlib 绘图线
开发语言
m0_6948455729 分钟前
tinylisp 是什么?超轻量 Lisp 解释器编译与运行教程
服务器·开发语言·云计算·github·lisp
春日见34 分钟前
如何创建一个PR
运维·开发语言·windows·git·docker·容器
C++ 老炮儿的技术栈38 分钟前
VS2015 + Qt 实现图形化Hello World(详细步骤)
c语言·开发语言·c++·windows·qt
派葛穆44 分钟前
Python-批量安装依赖
开发语言·python
MSTcheng.1 小时前
【C++】C++11新特性(二)
java·开发语言·c++·c++11
晓13131 小时前
第七章 【C语言篇:文件】 文件全面解析
linux·c语言·开发语言