You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter3+PHP7.4 API限流实现:循环查询数据库直到忙任务数小于50

实现方案

核心逻辑通过无限循环轮询繁忙任务数实现,满足阈值条件后再执行后续API调用,改造后完整代码如下:

// 脚本开头关闭执行时间限制,避免长时间运行被系统终止
set_time_limit(0);

// 加载所有待处理任务
$jobs = $this->db->get('jobs')->result_array();

foreach($jobs as $job)
{
    // 轮询等待繁忙任务数低于50
    while (true) {
        // 修复长时间休眠导致的数据库连接断开问题
        $this->db->reconnect();
        $busy = $this->db->get_where('jobs', ['status' => 'busy'])->num_rows();
        if ($busy < 50) {
            break;
        }
        // 不满足条件等待50秒后重试
        sleep(50);
    }

    // 先更新当前任务状态为繁忙,避免并发统计误差
    $this->db->where('id', $job['id'])->update('jobs', ['status' => 'busy']);
    
    // 原有API调用逻辑写在此处
    // -----------------------
    // API调用完成后更新任务状态为成功/失败
}

注意事项

  • 必须在发起API请求前先更新当前任务的status为busy,否则轮询统计的繁忙任务数会出现偏差,导致实际并发超过服务商的50个限制。
  • 若你的任务处理是多进程/多脚本同时运行,建议给status更新操作加行锁,避免同时抢到同一个任务的情况。
  • sleep(50)单位为秒,可根据实际业务需要调整等待时长。

内容的提问来源于stack exchange,提问作者Back Office

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 17:27:02