阅读locust源码小记----分布式运行如何停止

首先带着问题找答案。。。

思考:分布式运行时,怎么控制什么时间停止压测?

启动master时可以传参:-t或者--run-time

先来看下关于这个参数的介绍:(文件:argument_parser.py)

运行指定的时间之后停止,例如300s,20m,3h,1h30m等等,只能跟--headless一起结合使用,默认是一直运行的

--headless 是指无图形模式启动,对应于locust0.*版本的--no-web

紧接着看main.py这个文件:

 

 

 

 如果指定了run_time参数,会启动一个定时任务,这个定时任务会在指定的时间之后运行一个事件:runner.quit()   ,也就是退出runner

接着看下runners.py文件

 

 

 第一步:首先master先判断当前状态如果不是ready,stopped,stopping,则 修改状态为stopping,并且遍历slave,给每个slave发送stop消息,  紧着触发test_stop事件,

 第二步:遍历slave,给每个slave发送quit消息,然后睡眠0.5s,然后杀死协程

其中,绿色方框里面那句,虽然触发了test_stop事件,但是没找到代码里面给test_stop事件注册监听器(有知道的大佬欢迎评论留言。。。。。)

 

 

 

 

 

 

slave收到stop的消息之后:更新状态为cleanup,杀死新增用户的协程(如果存在并且不是ready),停止用户,更新状态为stopped,CPU日志警告,给master发送client_stopped的消息,发送client_ready的消息,设置worker状态为ready

slave收到quit的消息之后:更新状态为cleanup,杀死新增用户的协程(如果存在并且不是ready),停止用户,更新状态为stopped,CPU日志警告,触发report_to_master事件,给master发送stats消息(发送一个最终的报告,以防存在任何没有被上报的采样数据),杀死协程

 

posted on 2021-10-19 20:47  朱古力88  阅读(215)  评论(0编辑  收藏  举报