作者:Tarek Ziadé

我们正在用 Python 构建这个简洁的服务,以从 Elasticsearch 中的各种来源(MySQL、网络驱动器、A​​WS 等)获取数据,用于企业搜索。

从第三方服务中提取数据到 Elasticsearch 通常是 I/O 密集型活动。 你的代码位于打开的套接字上,并将数据从一端传递到另一端。 这是 Python 异步应用程序的一个很好的用例,但它需要精心设计。

当数据流经该管道时,我们希望确保不会耗尽可用资源(RAM/CPU/FD)。 我们还希望在不终止 Elasticsearch 或后端服务的情况下最大化输出。

因此,这一切都是关于实施正确的节流和背压保护措施并显示正确的设置,这样你就可以根据你的网络带宽、可用 RAM 和 Elasticsearch 集群大小适当地调整服务的激进程度。

如果应用程序可以检查其执行环境并做出一些决定以自动和动态地调整其行为,则可加分。

所有这些调整和性能检查工作都需要针对每个新来源进行。 每次我们改变我们的服务时,我们都有来自不同团队的人参与代码库,我们需要标准化这种性能工作。 服务的性能可能会因为一个新的数据源阻塞事件循环或膨胀内存而下降。

这就是它变得非常有趣的地方:为了检查性能,每个开发人员都有其常用的工具,并且很难以标准化的方式共享这些知识。 Python 有许多工具可以检查你的应用程序的性能,并且没有所谓的 “完美工具”。

这让我回到了 12 年前,当时我在 QA 工具方面遇到了同样的困境并发布了 Flake8 0.1 — 我希望有一个统一的 CLI 来运行精选的 QA 工具列表。

该项目之所以流行,是因为它由了不起的人发展和维护,还因为最初的想法 — 一个 CLI 来统治他们 — 对于那些希望为他们的项目采用 QA 标准和一套良好实践的人来说非常有意义而不必深入研究他们应该运行的内容。 只是 flake8 它。

这正是我们今天要进行的性能测试。 一个统一的工具来运行性能测试,为我们的 Python 项目创建一个标准,并每次都生成相同的标准报告。

我们将其命名为 perf8 作为 flake8 参考(之所以命名为 flake8,是因为它是 pyflakes 和 pep8 的缩写),工作就在这里进行。

与 12 年前可用的相比,当前 Python 中的性能工具生态系统是如此惊人。 我就像糖果店里的孩子。

我们集成了 Memray、带有 speedscope 报告的 py-spy 和其他很酷的东西,比如 gprof2dot 生成的点图。 在我们的用例中,Py-spy 优于 cProfile,因为它运行在进程之外,并且在运行应用程序时不会增加大量的速度开销。 但它不适用于最新的 macOS 版本。 所以 cProfile 在这种情况下做出了不错的回退,并且点视图通常很快就会出现热点。

它在独立的 HTML 目录中生成统一的聚合报告,因此可以压缩和传递、自动生成或在开发人员笔记本电脑上生成。 我们不想使用像 metricbeats 这样复杂的系统代理来使其极其便携且易于在所有环境中运行。

要使用它,你只需使用以下命令运行你的 Python 应用程序:$ perf8 -c /path/to/app.py。

除了 HTML 报告之外,该目录还包含所有作为工件的原始指标,因此如果有一天我们想要将我们的 CI 插入 Kibana 仪表板并享受包含历史数据的更好的 UI,我们将能够利用 Perf8。

但就目前而言,简单的静态 HTML 报告就足够了!

请参阅下面的一些屏幕截图:

我们的目标是开发一个精选的工具列表,提供我们在研究一般性能时可能需要的所有指标。

Bob:我认为你的应用程序性能问题

Joe:让我们看看吧。 你能把你的 Perf8 报告发给我吗?

你怎么看?

这是 Elastic 的一个开源项目,欢迎贡献。 如果你知道应该存在的性能工具/库或有改进它的好主意,请通过在项目的问题跟踪器中开始对话来加入乐趣。

Perf8:Python 的性能指标相关推荐

  1. 机器学习模型常用性能指标和Python代码实现

    文章目录 问题描述 性能指标 分类问题 回归问题 代码实现 分类问题 回归问题 代码测试 分类问题 回归问题 问题描述 上半年开始做一个需要机器学习算法模型的项目,但是之前并没有研发过这类模型.起初的 ...

  2. python locust提取参数_Locust利用python模块psutil监控性能指标

    简介 psutil是一个开源切跨平台的库,其提供了便利的函数用来获取操作系统的信息,比如CPU,内存,磁盘,网络等.此外,psutil还可以用来进行进程管理,包括判断进程是否存在.获取进程列表.获取进 ...

  3. Python速度提升

    Python 是一种脚本语言,相比 C/C++ 这样的编译语言,在效率和性能方面存在一些不足.但是,有很多时候,Python 的效率并没有想象中的那么夸张.本文对一些 Python 代码加速运行的技巧 ...

  4. python模拟高并发_Python基于gevent实现高并发代码实例

    gevent是python的协程模块,协程可以理解成更轻量化的线程.因为性能测试工具的一些限制,就自己萌发了自己写性能测试工具的念想,当然,写的比较简单,比如缺少性能指标的收集,慢慢的优化 出来,这个 ...

  5. python列表元素交换位置_python删除列表元素5种方法,你会的是错误法还是最优解?...

    删除列表元素很多同学想当然的认为不就是循环遍历加上if判断再del吗?真的有这么简单吗? 还是直接上代码看案例吧: import time# 删除下面列表中所有张姓元素,输出的结果应该是['李老大', ...

  6. resnet keras 结构_Wandb用起来,一行Python代码实现Keras模型可视化

    大数据文摘出品 来源:wandb 编译:邢畅.宁静 在训练神经网络的过程中,我们可能会希望可视化网络的性能和中间的结构,很多可视化代码的冗长复杂使得我们望而却步,有没有一行代码就能解决可视化的所有问题 ...

  7. Python这么慢,为啥大公司还在用?

    公众号关注 "视学算法"设为 "星标",消息即可送达! 来自:https://www.jianshu.com/p/e18e01ad7ad9 前言 PyCon 是 ...

  8. Python加速运行技巧

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:机器学习算法那些事 Python 是一种脚本语言,相比 ...

  9. 推荐 Python 十大经典练手项目,让你的 Python 技能点全亮!

    前言:如果有人问:"Python还火吗?""当然,很火.""哪能火多久呢?""不知道." 技术发展到现在衍生出许多种编程 ...

最新文章

  1. BGP基本配置(GNS3)
  2. 【机器学习】监督学习--(回归)多项式回归
  3. am5728 是否支持aarch64_AM5728高性能音视频处理开发板介绍
  4. 基于JAVA+Swing+MYSQL的超市管理系统
  5. jmeter JDBC Request
  6. mysql之高性能索引
  7. 459B Pashmak and Flowers
  8. 理解iOS 8中的Self Sizing Cells和Dynamic Type
  9. 从本科到研究生,看大疆工程师给你定制的机器人学习计划
  10. Android6.0下的短信接收与发送功能的实现
  11. 华为重回Android,被谷歌移除的华为Mate 20 Pro重回Android Q名单
  12. 图形界面介绍Create Pin Blockage
  13. Python+Django+Mysql实现在线音乐推荐系统 基于用户、项目、兴趣标签的协同过滤推荐在线音乐系统、用户兴趣标签推荐系统 代码实现 源代码下载
  14. Excel一键创建班级成绩表模板的操作
  15. Go 青年团聚召集令,2050,我们来了
  16. Python 实现 周志华 《机器学习》 BP算法(高级版)
  17. 北京大学2009年4月18日计算机会场QA
  18. echart整体图形大小调整
  19. 基于protues仿真设计一款乒乓球游戏机
  20. google G1,G2,G3比较(YY)

热门文章

  1. 天狮集团新零售有什么优势?天狮直销等于天狮新零售?
  2. OID,唯一性的标志
  3. 免认证使用校园网(2022.6.3更新)
  4. [视频改]Docker技术从0到1全覆盖 docker入门向 文字版
  5. activiti 工作流会签 / 多人审批时若一人通过即可
  6. 【信息系统项目管理师 - 备考宝典 - 39】历年考试试题易错点题库
  7. vue实例的生命周期详解
  8. C++面向对象程序设计概念全总结(六)--最全的概念总结
  9. FS4412开发板简介
  10. 世峰与深圳供电局就电力发展历史虚拟现实培训系统项目展开合作