蝗虫中每个线程的不同数据集/蝗虫中的线程控制

时间:2020-10-15 07:53:46

标签: python multithreading performance concurrency locust

我想对分布式应用程序进行负载测试,因此决定使用Locust。我面临的问题是此应用程序有许多不同的输入,因此我避免重复这些输入。

例如: 让我们考虑有4个输入(A,B,C,D)。现在,我正在从文件中读取这些输入,并发布在应用程序的API上。问题是,如果我有任务将输入A发布到API,则我产生的所有线程都会将“ A”发布到API,从而使其重复。我需要一种机制,可以将不同的输入提供给产生的不同线程(用户)。

有没有办法让我可以控制线程(用户)或简单地为它们提供不同的输入?

2 个答案:

答案 0 :(得分:0)

您也许可以使用运行中的用户的Greenlet标识符

import greenlet
...
(inside your task)
id = greenlet.getcurrent().minimal_ident

它们在蝗虫工作人员中并不是唯一的,但是也许您运行的不是分布式的。

答案 1 :(得分:0)

我遇到了同样的问题,并在 medium.com 上找到了一个 article(由 Karol Brenja 撰写)探讨了该主题。文章中的代码在 locust 的最新版本(撰写本文时为 1.4.4)时无法正常工作。

简而言之:

  1. 在greenlet的主/本地节点上启动ZMQ“服务器”,对测试数据进行排队(A、B、C、D)
  2. 从 worker 连接到 master 上的服务器
  3. 服务器响应队列中的输入之一
  4. Worker 使用测试数据运行任务

这也适用于本地模式,只要在阻塞模式下不请求测试数据。