为什么确定性分析器被称为“确定性”'?

时间:2016-06-28 14:23:46

标签: python profiling profiler deterministic

我目前正在使用cProfile(以及其他)在Python中进行一些分析任务。在documentation中它说:

  

cProfile和profile提供Python程序的确定性分析

在分析过程中,我对整个程序以及单个函数的cProfile结果略有不同。这很好,我想我至少理解了一些原因 - 例如,某些操作系统任务可以在后台运行并减慢我的程序。毕竟,cProfile确实可以实时运行,而不是CPU时间。

但是,它仍然提出了一个问题:如果每次都没有产生相同的结果,为什么称它为确定性分析?

1 个答案:

答案 0 :(得分:0)

问题在documentation

中得到了解答
  

27.4.5。什么是确定性分析?

     

确定性分析旨在反映监视所有函数调用,函数返回和异常事件的事实,并对这些事件之间的间隔(在此期间执行用户代码)进行精确计时。相反,统计分析(不是由该模块完成)随机采样有效指令指针,并推断出花费的时间。后一种技术传统上涉及较少的开销(因为代码不需要进行检测),但仅提供了时间花费的相对指示。

     

在Python中,由于在执行期间有一个解释器处于活动状态,因此不需要检测代码的存在来进行确定性分析。 Python自动为每个事件提供一个钩子(可选的回调)。此外,Python的解释性质往往会给执行带来如此多的开销,确定性分析往往只会在典型应用程序中增加小的处理开销。结果是确定性分析并不昂贵,但提供了有关Python程序执行的大量运行时统计信息。

     

呼叫计数统计信息可用于识别代码中的错误(令人惊讶的计数),以及识别可能的内联扩展点(高呼叫计数)。内部时间统计可用于识别应该仔细优化的“热循环”。应使用累积时间统计来识别算法选择中的高级错误。请注意,此探查器中累积时间的异常处理允许将算法的递归实现的统计信息直接与迭代实现进行比较。

这意味着它不依赖于某些采样,并且在相同的条件下应该重现数据。