繁体   English   中英

用Python测量时间

[英]Measuring time in 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

有什么建议吗?

首先看看这个链接: 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

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模块。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM