如何用Pythonstimeit计时代码段以测试性能?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (263)

我有一个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)

我需要的是执行查询和写入文件“结果”所需的时间。_update.txt“。其目的是测试具有不同索引和调优机制的数据库的UPDATE语句。

提问于
用户回答回答于

您可以在要计时的块之前和之后使用time.time。

import time

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

total = t1-t0

这个方法不像时间那样精确(它不平均几次运行),但它是直接的。

time.time()(在windows和Linux中)和time.lock(Linux中)对于快速函数没有足够的分辨率(您得到的总计=0)。在这种情况下,或者如果您想将几次运行所经过的时间平均化。

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.lock()具有更高的精度(微秒而不是秒),必须优先于time.time()。

用户回答回答于

具体来说,如果要计时的函数是一个无参数的函数,则调用foobar,你可以用time:

timeit.timeit('foobar()', number=1000)

您最好指定运行的次数,因为对于用例来说,默认的100万次可能很高。

扫码关注云+社区

领取腾讯云代金券