Python 如何从一个蝗虫类实例中知道它是在主服务器还是从服务器上运行的?

Python 如何从一个蝗虫类实例中知道它是在主服务器还是从服务器上运行的?,python,python-3.x,performance-testing,load-testing,locust,Python,Python 3.x,Performance Testing,Load Testing,Locust,这是我想做的一个简单的例子 在中,我想运行一个和平的代码只有当它是主 class SimpleTaskSet(任务集): @任务 def do_某事(自我): #做点什么。。。 通过 蝗虫类(蝗虫): 任务集=简单任务集 最小等待时间=1 最大等待时间=10 def设置(自): if master:#如何在这里显示代码在master上运行? #做点什么 通过 其他: #做点别的 通过 为了检查蝗虫是主蝗虫还是从蝗虫,您可以使用蝗虫的运行程序,然后检查当前运行程序是否是主蝗虫的实例: from l

这是我想做的一个简单的例子

在中,我想运行一个和平的代码只有当它是主

class SimpleTaskSet(任务集):
@任务
def do_某事(自我):
#做点什么。。。
通过
蝗虫类(蝗虫):
任务集=简单任务集
最小等待时间=1
最大等待时间=10
def设置(自):
if master:#如何在这里显示代码在master上运行?
#做点什么
通过
其他:
#做点别的
通过

为了检查蝗虫是主蝗虫还是从蝗虫,您可以使用蝗虫的
运行程序
,然后检查当前运行程序是否是主蝗虫的实例:

from locust import runners

... # Your code

def setup(self):
    if isinstance(runners.locust_runner, runners.MasterLocustRunner):
        # do something
        pass
    else:
        # do something else
        pass
然而,请记住蝗虫主人不做任务,也不会像蝗虫奴隶一样完成所有的功能

编辑-第二个问题

据我所知,考虑到蝗虫的工作方式,在整个测试中只运行一段代码是非常棘手的

您可以做的第一件事是使用任务集方法
setup

class Behavior(TaskSet):
    def setup(self):
        # Do things only once here

    # The rest of your code


class User(HttpLocust):
    task_set = Behavior
    # ....
您可以在官方文档中阅读更多关于设置/开启/开启+停止等的信息:

现在,这个设置有什么问题?我不知道您在这个设置部分想要实现什么,但是记住这个函数在每个测试中只运行一次,但在每个进程中只运行一次,这一点非常重要

这是什么意思?如果在分布式模式(主从设置)下运行蝗虫测试,则
设置
函数将为每个python进程运行一次(也称为启动测试的每个单独的从终端)

如果这不是您的问题,您可以轻松地使用设置功能来实现您想要实现的目标。但是,如果没有,您可能需要想出一种方法让蝗虫进程相互了解,以便它们可以检查是否也需要运行
setup
的内容,或者跳过该块,因为从属进程已经运行了它。这可能会很棘手。

根据蝗虫文档,只有在分布式模式下运行时,测试启动事件才会在主机上运行。 test_start事件将在蝗虫初始化事件之后发生。 您还可以在模块级别使用上述技巧检查节点类型,并在填充任何工作人员或任务之前运行代码。
请参阅这个稍微过时的(蝗虫0.9)示例。

非常感谢您的回答@alin luga,特别是解释master不会运行它!你有/知道我如何让一段代码只由一个从机执行的例子吗?或者我可以尝试一种可能的未经测试的方式?再次感谢@aliniuga!根据您参考的文档,我知道
设置
启动
!但是我真的想创建一些资源,这些资源只与奴隶的数量无关。我正在看蝗虫代码,可能我会通过一些主从之间的自定义事件挂钩来实现这一点。欢迎使用stackoverflow!您可能希望尝试从引用的站点引入细节,因为站点本身可能会更改或消失,这将使您的答案毫无用处。