Locust中wait_time中匿名函数使用方法浅析

前言

翻出之前做个压测项,看到locust中对等待时间的实现方式感到好奇,于是总结下来。

源代码实现

def between(min_wait, max_wait):
    """
    Returns a function that will return a random number between min_wait and max_wait.

    Example::

        class MyUser(User):
            # wait between 3.0 and 10.5 seconds after each task
            wait_time = between(3.0, 10.5)
    """
    return lambda instance: min_wait + random.random() * (max_wait - min_wait)


def constant(wait_time):
    """
    Returns a function that just returns the number specified by the wait_time argument

    Example::

        class MyUser(User):
            wait_time = constant(3)
    """
    return lambda instance: wait_time

可以看到locust中对等待时间的处理是先返回一个匿名函数,然后在一个类中 wait_time = constant(3),再在task类中调用wait_time()返回一个具体的等待时间

def wait(self):
    """
    Make the running user sleep for a duration defined by the Locust.wait_time
    function (or TaskSet.wait_time function if it's been defined).

    The user can also be killed gracefully while it's sleeping, so calling this
    method within a task makes it possible for a user to be killed mid-task, even if you've
    set a stop_timeout. If this behaviour is not desired you should make the user wait using
    gevent.sleep() instead.
    """
    if self.user._state == LOCUST_STATE_STOPPING:
        raise StopUser()
    self.user._state = LOCUST_STATE_WAITING
    self._sleep(self.wait_time())
    if self.user._state == LOCUST_STATE_STOPPING:
        raise StopUser()
    self.user._state = LOCUST_STATE_RUNNING

def _sleep(self, seconds):
    gevent.sleep(seconds)

写法的原理探究

我们先自己仿写一下代码

def call_fuc():
    return lambda x: print(x)
    
class User:
    x = call_fuc()
    
u = User()
u.x()    

在这里插入图片描述
看到当我们执行的时候,就会执行返回的匿名函数的逻辑打印一个类对象

拆解函数

对于不熟悉lambda函数的人来说理解这段函数可能有点绕,所以我们拆解一下

def call_fuc():
    # return lambda x: print(x)
    def lam(x):
        print(x)

在上面可以看到返回了一个函数给类属性所以x = call_fuc(),x就成了一个方法了,方法接收一个形参x,接收一个参数x,又是在类里面,这不是就是成了一个实例方法吗,在类里面我们约定俗成把第一个参数叫做self,但是Python本身没有对命名做要求所以在这里x = self。重新定义一个实例方法

class User:
    x = call_fuc()

    def lam(x):
        print(x)

        
u = User()
u.lam()
u.x()  

输出结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/434099.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux网络】再谈 “协议“

目录 再谈 "协议" 结构化数据的传输 序列化和反序列化 网络版计算器 封装套接字操作 服务端代码 服务进程执行例程 启动网络版服务端 协议定制 客户端代码 代码测试 使用JSON进行序列化与反序列化 我们程序员写的一个个解决我们实际问题,满…

最强照片AI无损放大工具

使用人工智能的能力来放大图像,同时为惊人的结果添加自然的细节。 使用深度学习技术,A.I.GigaPixEL可以放大图像并填满其他调整大小的产品所遗漏的细节。 下载地址:最强照片AI无损放大工具.zip

LeetCode-第201题-数字范围按位与

1.题目描述 给你两个整数 left 和 right ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 left 、right 端点)。 2.样例描述 3.思路描述 方法一:按位与,求两端数字二进制的公共前缀&…

数据库系列之:什么是 SAP HANA?

数据库系列之:什么是 SAP HANA? 一、什么是 SAP HANA?二、什么是内存数据库?三、SAP HANA 有多快?四、SAP HANA 的十大优势五、SAP HANA 架构六、数据库设计七、数据库管理八、应用开发九、高级分析十、数据虚拟化 一、…

18.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-数据分析工具数据与消息配置的实现

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 上一个内容:17.数据分析工具配置功能的实现 码云地址(master 分支):https://gitee.com/dye_your_fingers/titan…

中医舌苔笔记

舌诊时按照舌尖-舌中-舌根-舌侧的顺序进行观察。 先看舌体再看舌苔,30秒左右。 如果一次望舌判断不清,可令病人休息3~5分钟后,重新观察一次 舌诊脏腑部位分属图 舌体 胖嫩而边有齿痕为气虚、阳虚。 薄白而润为风寒; 薄白而燥…

CVE-2020-27194:eBPF verifier 整数截断导致的越界读写

前言 影响版本:5.8.x 内核分支,v5.8.15 以及更低的版本 编译选项:CONFIG_BPF_SYSCALL,config 所有带 BPF 字样的编译选项 漏洞概述:eBPF 验证程序中进行 or 操作时,scalar32_min_max_or 函数将 64 位的值赋…

Android开发社招面试总结,Android程序员面试必备的知识点

导语 学历永远是横在我们进人大厂的一道门槛,好像无论怎么努力,总能被那些985,211 按在地上摩擦! 不仅要被“他们”看不起,在HR挑选简历,学历这块就直接被刷下去了,连证明自己的机会也没有,学…

社区分享|中华保险基于MeterSphere开展接口自动化测试

中华联合保险集团股份有限公司(以下简称为“中华保险”)始创于1986年,是全国唯一一家以“中华”冠名的国有控股保险公司。截至2022年12月底,中华保险总资产为1006.06亿元,在全国拥有超过2900个营业网点,员工…

2024 年广西职业院校技能大赛高职组《云计算应用》赛项赛题第 3 套

#需要资源或有问题的,可私博主!!! #需要资源或有问题的,可私博主!!! #需要资源或有问题的,可私博主!!! 某企业根据自身业务需求&…

模仿Gitee实现站外链接跳转时进行确认

概述 如Gitee等网站,在有外部链接的时候如果不是同域则会出现一个确认页面。本文就带你看看这个功能应该如何实现。 效果 实现 1. 实现思路 将打开链接作为参数传递给一个中间页面,在页面加载的时候判断链接的域名和当前网站是否同域,同域…

web学习笔记(二十六)

目录 1.JS执行队列 1.1JS是单线程 1.2Web Worker 1.3同步和异步 1.4JS执行机制 2.location对象 2.1什么是location对象 2.2url包含的信息 2.3location对象属性 2.4location对象的方法 3.navigator对象和history对象 3.1navigator对象 3.2history对象 1.JS执行队…

基于深度学习的苹果叶片病害检测系统(含UI界面、yolov8、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下: 算法模型:     yolov8 yolov8主要包含以下几种创新:         1. 可以任意更换主干结构,支持几百种网络主干。 数据集:     网上下载的数据集&#x…

Jmeter吞吐量控制器使用

场景:在同一个线程组里,有10个并发,7个做A业务,3个做B业务,要模拟这种场景,可以通过吞吐量模拟器来实现。 添加吞吐量控制器 用法1:Percent Executions 在一个线程组内分别建立两个吞吐量控制…

rtt的io设备框架面向对象学习-电阻屏LCD设备

目录 1.8080电阻屏LCD设备1.1 构造流程1.2 使用 2.spi电阻屏LCD3.i2c电阻屏LCD4.总结 电阻屏LCD通信接口有支持I2c、SPI和8080通信接口的,根据通信接口分立章节。 另外,lcd这块不像其他设备类,rtt没有实现lcd设备类的设备驱动框架层&#xf…

我们发布了一款类Wox和Alfred,全新的桌面端效率工具RunFlow,欢迎大家来体验

RunFlow是一款跨平台的生产力工具,可以启动应用程序和搜索文件等,类似于Windows平台的Wox和PowerToys,同样也类似于Mac平台的Alfred和Raycast。但我们并不与这些工具相同,我们有自己独特的新特性。下面,我们将向您详细…

仙宫云:细节控ComfyUI AI写实摄影+视频镜像

在使用comfyui工作流时经常遇到插件安装,模型下载的问题,为了方便大家使用和体验comfyui,我在仙宫云上部署了一个云端comfyui镜像包,开放给大家使用。 细节控ComfyUI AI写实摄影视频工作流: 镜像主页:仙宫…

Stable Diffusion V3测评

1.引言 3月5号,Stability AI发布了介绍Stable Diffusion V3的研究论文,链接地址:戳我 这是目前他们发布的最先进、功能最强大的图像生成器,与一年多前发布的令人印象深刻的 Stable Diffusion V2.1 相比有了大幅升级。SD3所带来的…

机器视觉 /从bottle.hdev示例程序开启HalconHDevelop征程

文章目录 概述示例程序bottle.hdev源码Step 0: PreparationsStep 1: Segmentation - 读取并显示图片Step 1: Segmentation - 创建并设置OCR模型Step 1: Segmentation - 文本分割与识别计算结果显示内存释放 导出为C代码导出为C代码配置 VS Halcon 环境VS程序执行结果HTuple hv…

代码随想录day13(1)栈与队列:用栈实现队列(leetcode232)

题目要求:使用栈实现push、pop、empty、peek(返回队列首部元素)。 思路:本题思路比较容易,即用两个栈模拟即可,pop时只需要先判断stackout栈是否为空,如果不空直接弹出,如果空就将s…