Python 蝗虫似乎开火请求\u成功事件挂钩比我的实际请求高60倍

Python 蝗虫似乎开火请求\u成功事件挂钩比我的实际请求高60倍,python,performance-testing,locust,Python,Performance Testing,Locust,我正在用蝗虫做一些负载测试。值得一提的是,我还使用Graphite和Grafana对结果进行分析,但我可以在不加载或在代码中使用任何一个的情况下生成此问题 最简单的是,这个问题可以用以下非常简单的蝗虫文件复制: from locust import HttpLocust, TaskSet, task, between import locust.events class Tasks(TaskSet): @task def make_request(self):

我正在用蝗虫做一些负载测试。值得一提的是,我还使用Graphite和Grafana对结果进行分析,但我可以在不加载或在代码中使用任何一个的情况下生成此问题

最简单的是,这个问题可以用以下非常简单的蝗虫文件复制:

from locust import HttpLocust, TaskSet, task, between
import locust.events


class Tasks(TaskSet):
    @task
    def make_request(self):
        self.client.get('/')
        print('doing thing')


class Locust(HttpLocust):
    wait_time = between(1, 3)
    task_set = Tasks

    def __init__(self):
        super(Locust, self).__init__()
        locust.events.request_success += self.hook_request_success

    def hook_request_success(self, request_type, name,
                             response_time, response_length):
        # This is where I would make a call to send the request's metadata to Graphite
        print("sending thing")
这样称呼:

locust -H <host> -t 10s -c 1000 -r 10 --no-web -f test.py
如您所见,规范是基本的。我有一个单任务计划,我想执行一个请求,将每个请求的结果发送给Graphite。然而,在我所有的跑步中,当我假设它们是一对一时,我得到的发送东西的实例比做事情的实例多近60倍!我已经确认该函数是使用相同的参数调用的,并且表示完全相同的请求,只是针对Hocust发出的每个实际请求调用了多次。我根本不想要这个,我只想发送一次请求


为什么会这样?有什么我做错了吗?

每次生成/实例化蝗虫时,您都在添加事件侦听器

使hook_request_success成为一个全局函数,并从那里添加它,将其更改为如下内容:

locust.events.request_success += hook_request_success

这样,它将只添加一次,这是您想要的。

完全有效!的确是网络天才。非常感谢你。