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

Locust分布式模式:主节点能否通过事件检测新Worker加入并发送消息?

Locust分布式模式下检测新Worker节点并发送消息的方案

在Locust的分布式模式中,worker_report事件可以满足你检测新Worker节点加入的需求——它会在Worker节点每次向主节点发送状态报告时触发,包括Worker刚启动连接到主节点的那一刻。

实现思路

  1. 在主节点维护一个集合,记录已经处理过的Worker ID,避免重复发送消息
  2. 监听worker_report事件,每次触发时检查当前Worker是否为新加入节点
  3. 若为新Worker,调用environment.runner.send_message向其发送指定消息

示例代码

主节点侧代码

from locust import events
from locust.runners import MasterRunner

# 存储已连接的Worker ID,避免重复发送消息
connected_workers = set()

@events.worker_report.add_listener
def on_worker_report(environment, worker_id, **_kwargs):
    # 仅在主节点执行逻辑
    if isinstance(environment.runner, MasterRunner):
        if worker_id not in connected_workers:
            connected_workers.add(worker_id)
            # 定义要发送的消息内容
            users = [
                {"name": "User1"},
                {"name": "User2"},
                {"name": "User3"},
            ]
            # 向当前新加入的Worker定向发送消息
            environment.runner.send_message('test_users', users, worker_id=worker_id)

Worker节点侧代码(接收消息)

from locust import events

# 监听主节点发送的'test_users'消息
@events.message.add_listener
def on_test_users_message(message, **_kwargs):
    if message.type == 'test_users':
        # 处理接收到的用户数据,比如存入全局变量供任务使用
        print(f"Worker接收到用户数据: {message.data}")

注意事项

  • worker_report事件默认每10秒触发一次,必须用集合记录已处理的Worker ID,防止重复发送消息
  • 发送消息时指定worker_id参数,可确保消息只发给目标新Worker,而非所有Worker
  • 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.12 07:28:21