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

使用Locust模拟突发请求的配置合理性验证

你的Locust配置与代码问题分析

代码的核心问题

你当前的代码无法实现预期的并发突发请求,原因如下:

  • 内部的send_request()是同步执行的,直接调用send_request()会阻塞直到请求完成,futures列表里存储的都是None,后续调用future.result()会直接抛出AttributeError(因为None没有result方法)。
  • 这种写法本质上是串行执行请求,根本达不到批量并发的效果。

配置合理性分析

你计划设置60个用户、每秒启动60个用户的配置,和你的目标(600次/秒、1200次总请求)不匹配:

  1. 按当前代码逻辑,每个用户的send_burst_request任务是串行发10次请求,假设单次请求耗时0.1秒,每个用户每秒只能发10次请求,60个用户理论上最多每秒600次,但实际因为串行阻塞,速率会远低于预期。
  2. 1200次总请求按600次/秒的速率,2秒就能完成,但每秒启动60个用户,1秒内启动完毕后,后续用户持续发请求会导致总请求数远超1200次,无法精准控制突发总量。

修正方案

1. 修复并发请求代码(基于Locust默认的gevent协程库)

from gevent import spawn

@task
def send_burst_request(self):
    def send_request():
        self.client.get("/api/v1/test")
    
    # 启动10个协程并发执行请求
    jobs = [spawn(send_request) for _ in range(10)]
    # 等待所有协程完成
    for job in jobs:
        job.join()

2. 调整配置匹配目标

如果要精准实现600次/秒、共1200次的突发请求,更推荐以下方式:

  • 用Locust的--rate参数(2.0+版本支持)直接控制请求速率,比如设置--rate=600,同时限制总请求数。
  • 如果用UI配置:
    • 用户数:假设每个用户每秒能稳定发10次请求,设置60个用户即可。
    • 启动速率:设置为每秒启动60个用户(1秒内完成全部启动),测试开始后2秒手动停止,或者在代码中加入全局计数器,达到1200次时自动终止任务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:33:26