在 Locust 任务中使用 Gevent 呈指数增长
Using Gevent inside locust task increases exponentially
我有一个 Web 服务器,我想对其 REST API 进行负载测试。我用的是locust==2.5.1, python==3.8.2.
蝗虫配置:
- 用户数:3
- 生成率:3
from locust import HttpUser, task, between, constant_throughput
import configparser
from gevent.pool import Group
file_path = "./sample/sample.wav"
num_of_parallel_requests = 3
class FileTranscribeUser(HttpUser):
@task(1)
def file_transcribe_request(self):
group = Group()
for i in range(0, num_of_parallel_requests):
group.spawn(lambda:self.client.post("/parse",
files = {'audio': open(file_path, 'rb')}))
预期结果:
每秒 Rquests 到 2 始终
实际结果:
请求从 0 猛增到 66,并且越来越多地使我的本地 运行 服务器崩溃(locoust 也在本地 运行)。
我参考了这个 article 来实现:
块引用
如果您只想每秒获得 2 个请求,我认为这篇文章根本不是您想要的。
您要做的是编写您的 task
,这样它只会适当地调用您的 self.client.post()
。然后在您的 Locustfile 中,您需要设置一个 wait_time
(参见 docs here),用于限制用户开始和 运行 完成您的任务之间的时间。你可能想要 wait_time = constant_pacing(1)
。然后当你 运行 Locust 时,给它 2 个用户和 2 的生成率。这将立即启动 2 个用户,只有 2 个用户会执行你的 post
调用,等一秒钟,然后被替换将再次拨打电话的 2 个用户,每秒给您恒定的 2 个请求。
我有一个 Web 服务器,我想对其 REST API 进行负载测试。我用的是locust==2.5.1, python==3.8.2.
蝗虫配置:
- 用户数:3
- 生成率:3
from locust import HttpUser, task, between, constant_throughput
import configparser
from gevent.pool import Group
file_path = "./sample/sample.wav"
num_of_parallel_requests = 3
class FileTranscribeUser(HttpUser):
@task(1)
def file_transcribe_request(self):
group = Group()
for i in range(0, num_of_parallel_requests):
group.spawn(lambda:self.client.post("/parse",
files = {'audio': open(file_path, 'rb')}))
预期结果: 每秒 Rquests 到 2 始终
实际结果: 请求从 0 猛增到 66,并且越来越多地使我的本地 运行 服务器崩溃(locoust 也在本地 运行)。
我参考了这个 article 来实现:
块引用
如果您只想每秒获得 2 个请求,我认为这篇文章根本不是您想要的。
您要做的是编写您的 task
,这样它只会适当地调用您的 self.client.post()
。然后在您的 Locustfile 中,您需要设置一个 wait_time
(参见 docs here),用于限制用户开始和 运行 完成您的任务之间的时间。你可能想要 wait_time = constant_pacing(1)
。然后当你 运行 Locust 时,给它 2 个用户和 2 的生成率。这将立即启动 2 个用户,只有 2 个用户会执行你的 post
调用,等一秒钟,然后被替换将再次拨打电话的 2 个用户,每秒给您恒定的 2 个请求。