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

Locust:如何在test_start事件中获取各Worker的精确用户数?

如何在Locust的test_start事件中获取每个Worker的精确用户数

你之前用平均值估算的方法在用户数无法被Worker数整除时确实会不准确,要获取精确值可以分两种场景处理:

1. 在Worker进程中获取自身的精确用户数

每个Worker进程启动后,Locust已经为它分配好了精确的目标用户数,直接通过WorkerRunner的target_user_count属性就能拿到:

from locust import events
from locust.runners import WorkerRunner

@events.test_start.add_listener
def on_test_start(environment, **_kwargs):
    if isinstance(environment.runner, WorkerRunner):
        exact_user_count = environment.runner.target_user_count
        print(f"当前Worker的精确目标用户数: {exact_user_count}")

2. 在Master进程中汇总所有Worker的精确用户数

Master和Worker是独立进程,无法直接共享数据,需要通过Worker向Master上报自身的目标用户数:

第一步:在Worker端修改上报数据,添加目标用户数

from locust import events
from locust.runners import WorkerRunner

@events.worker_report.add_listener
def on_worker_report_send(environment, data, **_kwargs):
    if isinstance(environment.runner, WorkerRunner):
        # 把当前Worker的目标用户数添加到上报数据中
        data["target_user_count"] = environment.runner.target_user_count

第二步:在Master端接收并存储各Worker的用户数

from locust import events
from locust.runners import MasterRunner

# 用于存储每个Worker的用户数,key为Worker的client_id
worker_user_counts = {}

@events.test_start.add_listener
def on_test_start(environment, **_kwargs):
    if isinstance(environment.runner, MasterRunner):
        print("准备接收Worker的用户数上报...")

@events.worker_report.add_listener
def on_worker_report_receive(client_id, data, **_kwargs):
    # 从上报数据中提取目标用户数并存储
    worker_user_counts[client_id] = data.get("target_user_count")
    print(f"收到Worker {client_id} 的目标用户数: {worker_user_counts[client_id]}")

这样不管用户数怎么分配,你都能获取到每个Worker的精确目标用户数了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 07:09:54