Scala:测量任何其他函数的运行时间的函数

Posted

技术标签:

【中文标题】Scala:测量任何其他函数的运行时间的函数【英文标题】:Scala : function to measure the runtime of any other function 【发布时间】:2020-03-05 13:52:34 【问题描述】:

我想编写一个函数,它打印任何其他函数的运行时,该函数将作为参数和参数一起作为参数。在 python 中举例我的想法以便更好地理解:


def runtimer(func , *args, **kwargs):
    start = time.time()
    result = func(*args, **kwargs)
    print(time.time() - start)
    return result


runtimer(time.sleep, 1)

Output: 1.000108242034912

我正在尝试使用val: _* 参数,但它实现了“全有或全无”。以另一种方式,我检查了源 scala github 中的 print 函数,但我没有找到任何适用于我的问题的内容。

我想知道这是否可以在 scala 上解决或获得任何建议。一个 java 实现也会很有用。

谢谢!

UPD:我将在这里留下一些最有用的参考资料:第一个用于最相似的实现,第二个最大正确用于在 JVM 上进行运行时计算(通过评论): 1)How to profile methods in Scala? 2)Scala : function to measure the runtime of any other function

问题还没有解决,等待讨论

【问题讨论】:

@MarioGalic 我相信副本的公认答案是完全错误的,这不是在 JVM 上进行基准测试的正确方法。我相信最好链接到this answer 我会澄清一下,精度并不重要,也就是说,这个围栏对于计算工作时间超过一分钟的算法的运行时间是必要的,而精度在 +-10% 时可能很重要.现在我使用这段代码: time = System.currentTimeMillis() func() println("Runtime: " + System.currentTimeMillis() - time) 如果你想要一个 Java 分析函数,你应该把它分解成一个单独的问题。它完全独立于 Scala 分析功能。 @LuisMiguelMejíaSuárez 我已经根据 Travis 更新了 How to profile methods in Scala?,希望是正确的 answer。 【参考方案1】:

要解决您的问题,您必须使用 HOF(高阶函数)。 这些是将其他函数作为参数的函数。 这是一个示例,说明如何为具有一个参数的函数完成此操作。

 def measure(yourFunction: (Int) => Int, arg1: Integer): Double = 
   val startTime = System.nanoTime()
   yourFunction(arg1)
   System.nanoTime() - startTime 
 

如您所见,此函数测量以 Int 作为参数并返回 Int 的函数的时间。 我已将您的 Python 代码翻译成 Scala

新泽西

【讨论】:

是的,它的工作,但我想写一个通用函数,不仅为 1 或只有 2 个参数。有人为我标记了这个答案并提供了很好的参考(通过名字来称呼):***.com/questions/9160001/…

以上是关于Scala:测量任何其他函数的运行时间的函数的主要内容,如果未能解决你的问题,请参考以下文章

Scala curried 函数在条件下执行任何表达式

测量程序启动时动态链接所花费的时间?

用时钟测量程序的运行时间

如何在并行 Scala 中运行不同的函数

opencv基础测量运行时间的函数getTickCount/getCPUTickCount/getTickFrequency

性能测量 - 获取每个函数的平均调用时间。英特尔 Vtune 放大器