Locust分布式模式:主节点能否通过事件检测新Worker加入并发送消息?
Locust分布式模式下检测新Worker节点并发送消息的方案
在Locust的分布式模式中,worker_report事件可以满足你检测新Worker节点加入的需求——它会在Worker节点每次向主节点发送状态报告时触发,包括Worker刚启动连接到主节点的那一刻。
实现思路
- 在主节点维护一个集合,记录已经处理过的Worker ID,避免重复发送消息
- 监听
worker_report事件,每次触发时检查当前Worker是否为新加入节点 - 若为新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
相关产品推荐
相关产品推荐

