如何使用 Pythons timeit 为测试性能的代码段计时?

新手上路,请多包涵

我有一个可以正常工作的 python 脚本,但我需要写下执行时间。我在谷歌上搜索过我应该使用 timeit 但我似乎无法让它工作。

我的 Python 脚本如下所示:

 import sys
import getopt
import timeit
import random
import os
import re
import ibm_db
import time
from string import maketrans
myfile = open("results_update.txt", "a")

for r in range(100):
    rannumber = random.randint(0, 100)

    update = "update TABLE set val = %i where MyCount >= '2010' and MyCount < '2012' and number = '250'" % rannumber
    #print rannumber

    conn = ibm_db.pconnect("dsn=myDB","usrname","secretPWD")

for r in range(5):
    print "Run %s\n" % r
    ibm_db.execute(query_stmt)
 query_stmt = ibm_db.prepare(conn, update)

myfile.close()
ibm_db.close(conn)

我需要的是执行查询并将其写入文件 results_update.txt 所需的时间。目的是用不同的索引和调整机制测试我的数据库的更新语句。

原文由 Emil Devantie Brockdorff 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 278
2 个回答

您可以在要计时的块前后使用 time.time()time.clock()

 import time

t0 = time.time()
code_block
t1 = time.time()

total = t1-t0

此方法不像 timeit 那样精确(它不平均几次运行)但它很简单。

time.time() (在 Windows 和 Linux 中)和 time.clock() (在 Linux 中)对于快速函数来说不够精确(你得到总计 = 0)。在这种情况下,或者如果您想平均几次运行所用的时间,则必须多次手动调用该函数(正如我认为您已经在示例代码中所做的那样,当您设置其 数字 参数时,timeit 会自动执行)

 import time

def myfast():
   code

n = 10000
t0 = time.time()
for i in range(n): myfast()
t1 = time.time()

total_n = t1-t0

在 Windows 中,正如 Corey 在评论中所述, time.clock() 具有更高的精度(微秒而不是秒)并且优于 time.time()

原文由 joaquin 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果你正在分析你的代码并且可以使用 IPython,它有神奇的功能 %timeit

%%timeit 对细胞进行操作。

 In [2]: %timeit cos(3.14)
10000000 loops, best of 3: 160 ns per loop

In [3]: %%timeit
   ...: cos(3.14)
   ...: x = 2 + 3
   ...:
10000000 loops, best of 3: 196 ns per loop

原文由 munk 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题