当前位置: 首页 > 知识库问答 >
问题:

基于JVM的度量库有python版本吗

墨星鹏
2023-03-14

我正在寻找python中的性能度量库。

我熟悉Coda Hale的指标,它是为JVM编写的,所以我想知道是否有Python等效的指标(并且没有利用JVM)。

简而言之,该工具的需求列表如下:

  • 在执行时计算不同类型的指标。计数器、仪表、仪表、计时器、直方图等。这里有一个不错的列表
  • 允许通过HTTP API轻松访问运行时数据。(我可以自己包装HTTP层,但如果它已经烘焙好了,那就更好了)
  • 特别是石墨或其他插件。CopperEgg会很好。或者NewRelic。
  • 在常用库的仪器支持中烘焙,例如memcached。

到目前为止,我已经找到了PyCounters,它可以完成部分工作,但不是全部。它满足了我的第一个要点(但它没有所有的度量类型,只有三个),仅此而已。

有比PyCounters更好的替代品吗?

谢谢

共有3个答案

何高旻
2023-03-14

我不知道有什么东西可以做到这一点,但我确实为一个项目写了一些东西,这个项目只是简单地向相关功能添加装饰器。

我创建了一组装饰器,用于测量函数的运行时,测量数据库访问函数的时间等。

这种装饰器的一个例子是:

def func_runtime(method):
    @functools.wraps(method)
    def wrapper(self, *args, **kwargs):
        start_time = datetime.datetime.utcnow()
        try:
            class_name = type(self).__name__
            method_name = method.__name__
            return method(self, *args, **kwargs)
        finally:
            end_time = datetime.datetime.utcnow() - start_time
            time_taken_ms = end_time.microseconds / 1000
            if _statsd:
                # Send the data to statsD, but you can do that for CopperEgg or anything else
                self.stats.timing("func.runtime.%s.%s" % (class_name, method_name), time_taken_ms)

以后你会这样使用它:

@func_runtime
def myfunc(a, b, c):
    pass

我还为从数据库读取的函数和写入数据库的函数添加了装饰器,这样我就可以得到代码在等待读取或写入数据上花费了多少时间的图表,以及我调用“读取”操作和“写入”操作的次数。

所以,总而言之,我有以下装饰器:- @func_runtime -测量函数的运行时- @func_dbread -放置在执行读取的函数上。递增database.reads计数器并向read_timing - @func_dbwrite发送计时数据-与@func_dbread相同,但用于写入- @func dbruntime -用于测量数据库特定函数的运行时间以及所有数据库函数的调用次数和总计时

您可以组合装饰器,它们以最接近函数的顺序运行,例如:

@func_dbruntime
@func_dbread
def some_db_read_function(a, b, c,d):
    pass

所以,func_dbread跑在func_dbruntime之前。

总而言之,它易于定制且非常强大,您可以扩展它以支持第三方服务,并添加代码以在相关时动态打开和关闭这些计数器。据我所知,性能损失充其量是最小的。

只是一个关于向CopperEgg和其他服务发送数据的通知,StatsD使用UDP,因为它的统计数据,你可以丢失一些数据,但仍然可以获得有意义的见解,它不会阻止任何东西。如果你想把数据发送到像CopperEgg这样的第三方网站,我会考虑把数据发送到一个本地队列,然后用一个不同的进程把它推给CopperEgg,只是为了把第三方服务问题从你自己的问题中分离出来。

就个人而言,对于这样的数据,StatsD非常棒,graphite为您提供了所有您需要的东西,包括第90百分位、平均值、最大值、绘图能力等,基本上拥有您需要的大多数计数器类型。

谷梁卓
2023-03-14

还没有机会尝试一下,但我几天前遇到了这个:https://github.com/Cue/scales

scales - Python 的指标 跟踪服务器状态和统计信息,使您可以查看服务器正在执行的操作。它还可以将指标发送到Graphite进行绘图或发送到文件以进行崩溃取证。

Scales的灵感来自奇妙的指标库,尽管它绝不是一个端口。

祁增
2023-03-14

我偶然发现了这个库,它是python的CodaHale metrics的一个端口。

缺少一些东西,即记者,但它做了大多数其他事情。

https://github.com/omergertel/pyformance/

无耻的插头,这是我的叉子,它增加了一个托管的石墨记者。将报告器添加到其他系统应该是微不足道的。

https://github.com/usmanismail/pyformance

 类似资料:
  • Keras 是一个高层神经网络 API,Keras 由纯 Python 编写而成并基 Tensorflow、Theano 以及 CNTK 后端。Keras 为支持快速实验而生,能够把你的idea迅速转换为结果,如果你有如下需求,请选择 Keras: 简易和快速的原型设计(keras具有高度模块化,极简,和可扩充特性) 支持 CNN 和 RNN,或二者的结合 无缝 CPU 和 GPU 切换 Kera

  • 停止更新通知 Hi all,十分感谢大家对keras-cn的支持,本文档从我读书的时候开始维护,到现在已经快两年了。这个过程中我通过翻译文档,为同学们debug和答疑学到了很多东西,也很开心能帮到一些同学。 从2017年我工作以后,由于工作比较繁忙,更新频率有所下降。到今年早期的时候这种情况更加严重,加之我了解到,keras官方已经出了中文文档,更觉本份文档似乎应该已经基本完成了其历史使命,该到了

  • Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK 或者 Theano 作为后端运行。Keras 的开发重点是支持快速的实验。能够以最小的时延把你的想法转换为实验结果,是做好研究的关键。

  • 错误:未能通知依赖项解析侦听器。图书馆网站。谷歌。Androidgms:play services measurement base是由[15.0.2,15.0.2]、[15.0.4,15.0.4]]上的各种其他库请求的,但解析为15.0.4。禁用插件并使用检查依赖关系树/gradlew:app:dependencies。

  • Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行。Keras 的开发重点是支持快速的实验。能够以最小的时延把你的想法转换为实验结果,是做好研究的关键。

  • 但是由于网络和其他一些技术问题,我在python脚本中的excel文件将无法在计划时间内更新,因此我需要手动运行python脚本,让我知道一旦文件更新,任何选项都是avl来运行任务调度程序。 例如:我运行python脚本的计划时间是每天上午9点,但我同意如果excel文件未在上午9点在python上更新,任务调度器需要在9点30分运行 提前谢谢。