Performance Python的不同运行时间

Performance Python的不同运行时间,performance,python-2.7,execution-time,Performance,Python 2.7,Execution Time,我正在写一个非常简单的程序来计算一个数的阶乘 这是: import time def factorial1(n): fattoriale = 1 while (n > 0): fattoriale = fattoriale * n n = n - 1 return fattoriale start_time = time.clock() factorial1(v) print float(time.clock() - start_t

我正在写一个非常简单的程序来计算一个数的阶乘

这是:

import time
def factorial1(n):
    fattoriale = 1
    while (n > 0):
        fattoriale = fattoriale * n
        n = n - 1
    return fattoriale

start_time = time.clock()
factorial1(v)
print float(time.clock() - start_time), "seconds"
对于我来说,奇怪的一点是在一个值上执行时间的结果:

1°运行:0.000301秒

2°运行:0.000430秒

3°运行:0.000278秒

你为什么认为它如此多变? 它是否与浮点型近似有关


谢谢,Gianluca这可能与资源共享有很大关系。如果您的程序作为一个单独的进程运行,那么它可能需要与同时在您的计算机上运行的其他进程竞争,这些进程正在使用CPU和RAM等资源。这些资源也被其他进程使用,因此根据并发条件“获取”它们将需要不同的时间,特别是当一些高优先级进程与之并行运行时,以及其他事情(如中断)可能具有更高的优先级


至于你的想法,据我所知,近似过程不应该采用可变时间,因为它运行的是确定性算法。然而,近似过程可能不得不再次争夺资源

在基于Unix的系统上time.clock返回CPU时间,而不是挂钟时间

您的程序是确定性的,即使打印是,在理想系统上也应始终在相同的时间内运行。我相信在您的测试中,您的程序被中断,一些中断处理程序被执行,或者调度程序暂停了您的进程,并将CPU分配给其他进程。当允许您的进程再次运行时,CPU缓存可能已被另一个进程填满,因此处理器需要将您的代码从内存再次加载到缓存中。这需要很短的时间,你可以在测试中看到这一点


<> P>为了量化你的程序有多快,你应该考虑不调用FIFOLAL1一次,而是成千上万次或者更大的输入值。当您的程序运行几秒钟时,调度效果的相对影响比您在测试中仅测试了不到一毫秒的时间要小。

您在哪个操作系统上运行?在基于Unix的系统上。时钟返回CPU时间,而不是挂钟时间。