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

Locust:如何为特定虚拟用户分配任务集中的指定任务

给每个虚拟用户分配特定任务的解决方案

针对你需要让5个虚拟用户各自执行任务集中某一个特定任务的需求,这里提供两种实用方案:

方案一:为每个任务创建独立用户类

直接给每个任务定义对应的用户类,每个用户类只绑定单个任务,运行时启动每个用户类的1个实例,刚好满足5个用户各执行一个任务的要求。

示例代码:

from locust import HttpUser, task, between

# 定义所有任务
def task1(client):
    client.get("/task1")

def task2(client):
    client.get("/task2")

def task3(client):
    client.get("/task3")

def task4(client):
    client.get("/task4")

def task5(client):
    client.get("/task5")

# 为每个任务创建独立用户类
class User1(HttpUser):
    tasks = [task1]
    wait_time = between(1, 3)

class User2(HttpUser):
    tasks = [task2]
    wait_time = between(1, 3)

class User3(HttpUser):
    tasks = [task3]
    wait_time = between(1, 3)

class User4(HttpUser):
    tasks = [task4]
    wait_time = between(1, 3)

class User5(HttpUser):
    tasks = [task5]
    wait_time = between(1, 3)

运行时执行命令:

locust -f your_script.py User1 User2 User3 User4 User5

启动后每个用户类会生成1个实例,每个用户仅执行绑定的对应任务。

方案二:动态为用户分配任务ID

通过给用户添加任务标识属性,在任务集中仅执行该标识对应的任务,无需创建多个用户类。

示例代码:

from locust import HttpUser, TaskSet, task, between

class MyTaskSet(TaskSet):
    def on_start(self):
        # 根据用户的任务ID绑定目标任务
        self.target_task = [self.task1, self.task2, self.task3, self.task4, self.task5][self.user.assigned_task_id]
    
    # 设置唯一执行的任务,权重设为最高
    @task(1)
    def run_assigned_task(self):
        self.target_task()
    
    # 原任务设置权重为0,避免被随机选中
    @task(0)
    def task1(self):
        self.client.get("/task1")
    
    @task(0)
    def task2(self):
        self.client.get("/task2")
    
    @task(0)
    def task3(self):
        self.client.get("/task3")
    
    @task(0)
    def task4(self):
        self.client.get("/task4")
    
    @task(0)
    def task5(self):
        self.client.get("/task5")

class User(HttpUser):
    tasks = [MyTaskSet]
    wait_time = between(1, 3)
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 为每个用户分配唯一任务ID(0-4对应5个任务)
        # 这里利用运行时用户计数来分配,确保每个用户ID唯一
        self.assigned_task_id = self.environment.runner.user_count - 1

运行时直接启动User类,指定用户数为5:

locust -f your_script.py User -u 5 -r 1

每个用户会被分配0-4中的一个ID,对应执行任务集中的某一个任务。

两种方案对比:

  • 方案一适合任务逻辑差异较大的场景,代码直观易维护;
  • 方案二更适合任务结构相似的场景,避免重复创建用户类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 21:27:28