用Python测量时间

时间:2014-03-15 15:28:27

标签: python

我有一个测量其他功能持续时间并将其保存在特定文件中的功能:

def timeandsave(n, function, some_list, index=0):
    start=0
    gen(n, some_list)
    start = time.time()
    function(some_list)
    end = time.time() - start
    print 'Time: ' + str(end)
    plik = open('Sort' + str(n) + '_ind' + str(index) + '_result.txt', 'a')
    plik.write(str(end) + '\n')
    plik.close()
    return end

现在我正在使用例如:

timeandsave(10000, quick_sort_r, list, 1)

答案是对的:

Time: 0.166000127792

但是当我想在循环中使用它几次时,它会打印并保存一些结果:

Input:
for i in range(0, 5):
    timeandsave(10000, quick_sort_r, list, 1)

Output:
Time: 0.173000097275
Time: 0.375999927521
Time: 0.577000141144
Time: 0.772000074387
Time: 0.962000131607

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

首先看一下这个链接:http://docs.python.org/2/library/timeit.html

现在为您的代码:
在主程序中,您将列表作为参数传递,这被分配给some_list,它是参数的一部分。现在,如果你修改some_list;偶数列表将被修改。
最有可能当你使用gen()时,你正在修改some_list的大小,反过来修改' list'本身。
当您将列表传递给some_copy时,请先执行深层复制或使用元组而不是列表。 (推荐后者)。

选项1:

def timeandsave(n, function, some_list, index=0):
  start=0
  my_list = copy.deepcopy(some_list)
  gen(n, my_list)
  #etc logic
  return end

选项2:

def timeandsave(n, function, some_tuple, index=0):
  start=0
  #etc logic

答案 1 :(得分:0)

timeandsave 会返回执行该功能所需的时间,因此您可以使用它来查找平均值:

def runTrials(trials, n, func, list):
    total= 0.0
    for _ in range(trials):
        total+= timeandsave(n, func, list, 1)
    average= total/ trials
    file= open('AVERAGES.txt', 'a')
    file.write('Trials: '+str(trials)+ ', average: '+ str(average))

如果您使用的是python 2,将 range()替换为 xrange(),则会减少内存使用量。另请参阅python的 timeit 模块。