Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于JVM的度量库是否有python版本_Python_Performance_Performancecounter_Metrics - Fatal编程技术网

基于JVM的度量库是否有python版本

基于JVM的度量库是否有python版本,python,performance,performancecounter,metrics,Python,Performance,Performancecounter,Metrics,我正在寻找python中的性能度量库 我对Coda Hale很熟悉,它是为JVM编写的,因此我想知道是否有一个与之类似的python(它不使用JVM) 简而言之,该工具的需求清单如下: 在执行时统计不同类型的度量。计数器、仪表、仪表、计时器、直方图等。有一个很好的列表 允许通过HTTP API轻松访问运行时数据。(我可以自己包装HTTP层,但如果已经烘焙好了,那就更好了) 特别是石墨插件,或其他插件。铜杯就好了。或者是纽舍利 对常见lib(如memcached)的内置检测支持 到目前为止,我

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

我对Coda Hale很熟悉,它是为JVM编写的,因此我想知道是否有一个与之类似的python(它不使用JVM)

简而言之,该工具的需求清单如下:

  • 在执行时统计不同类型的度量。计数器、仪表、仪表、计时器、直方图等。有一个很好的列表
  • 允许通过HTTP API轻松访问运行时数据。(我可以自己包装HTTP层,但如果已经烘焙好了,那就更好了)
  • 特别是石墨插件,或其他插件。铜杯就好了。或者是纽舍利
  • 对常见lib(如memcached)的内置检测支持
到目前为止,我已经找到了其中的一部分,但不是全部。它满足了我的第一个要点(但它没有所有的度量类型,只有三个),仅此而已

有更好的替代品吗


谢谢

我不知道有什么东西可以做到这一点,但我确实在不久前为一个项目写了一些东西,通过简单地向相关函数添加装饰器就可以做到这一点

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

这种装饰的一个例子是:

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
我还为从DB读取的函数和向DB写入的函数添加了一个修饰符,这样我可以得到代码在等待读取数据或写入数据上花费了多少时间的图表,以及我调用“读取”操作和“写入”操作的次数

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

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

@func_dbruntime
@func_dbread
def some_db_read_function(a, b, c,d):
    pass
因此,@func_dbread在@func_dbruntime之前运行

总而言之,它易于定制,功能非常强大,您可以对其进行扩展以支持第三方服务,还可以添加代码,以便在相关时动态打开和关闭这些计数器。就我所知,对表现的惩罚充其量是最小的

StatsD使用UDP向CopperEgg和其他服务发送数据,因为它的统计数据可能会丢失一些数据,但仍然可以获得有意义的见解,并且不会阻止任何内容。如果你想把数据发送到像CopPalgEclipse这样的第三方站点,我会考虑将数据发送到本地队列,然后用不同的进程将其推到CopPalEng5中,以便将第三方服务问题与你自己的解耦。


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

还没有机会尝试它,但几天前我遇到了这个:

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


scales的灵感来自奇妙的度量库,但它绝不是一个端口。

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

缺少了一些东西,比如记者,但它做了其他大部分事情

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


现在有一些记者: