locust分布式时,需借助命令locust 一个一个启动worker,在使用中有点繁琐,
下面借助于多进程,按既定worker数量,一键启动;
class WebsiteUser(HttpUser): tasks = [TaskSet] host = "https://www.baidu.com" wait_time = between(0, 0) def processFun(cmd): os.system(cmd) def start_by_process(tst_locust_file, slave_num, master_host='127.0.0.1', locust_web_port=8090, no_web=False, user_num=10, user_rate=1, result_log='result.log', run_log='run.log'): p_lst = [] if no_web: slave_cmd = f"locust -f {tst_locust_file} --worker --master-host={master_host}" master_cmd = f"locust -f {tst_locust_file} --headless -u {user_num} -r {user_rate} --master" else: slave_cmd = f"locust -f {tst_locust_file} --worker --master-host={master_host}" master_cmd = f"locust -f {tst_locust_file} --web-host {master_host} --web-port {locust_web_port} --master" master_cmd += f' --logfile {result_log} --loglevel INFO 1>{run_log} 2>&1' # 启动master process_master = multiprocessing.Process(target=processFun, args=(master_cmd,)) process_master.start() p_lst.append(process_master) # 启动 worker for index_num in range(slave_num): process = multiprocessing.Process(target=processFun, args=(slave_cmd,)) process.start() p_lst.append(process) # 阻塞等待 for process in p_lst: process.join() if __name__ == "__main__": tst_locust_path = 'wms/wms_test' slave_num = 3 # 计划所启动worker数量, 不可超过运行机的CPU数量 master_host = '127.0.0.1' master_host = '192.168.1.102' locust_web_port = 8099 # locust web页面挂载端口 no_web = False tst_locust_file = os.path.basename(__file__) # 本脚本名 os.chdir(os.getcwd().replace(tst_locust_path.replace('/', os.sep), '')) tst_locust_file = f'{tst_locust_path}/{tst_locust_file}' start_by_process(tst_locust_file, slave_num, master_host, locust_web_port, no_web=no_web)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!