我有一个python脚本,它可以正常工作,但是我需要编写执行时间。我在google上搜索到应该使用^{
我的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
所需的时间。目的是使用不同的索引和优化机制测试数据库的update语句。
您可以在要计时的块前后使用^{} 或^{} 。
这个方法不像^{} 那样精确(它不平均几次运行),但它很简单。
time.time()
(在Windows和Linux中)和time.clock()
(在Linux中)对于快速函数来说不够精确(得到total=0)。在这种情况下,或者如果希望平均几次运行所花费的时间,则必须手动多次调用该函数(正如我在示例代码中所做的那样,当设置其number参数时,该函数将自动执行)在Windows中,正如Corey在注释中所说,
time.clock()
具有更高的精度(微秒而不是秒),并且优于time.time()
。如果您正在分析代码并可以使用IPython,那么它具有神奇的功能
%timeit
。%%timeit
在单元格上操作。除了计时之外,您显示的这段代码完全不正确:您执行100个连接(完全忽略除最后一个以外的所有连接),然后当您执行第一个execute调用时,向它传递一个局部变量
query_stmt
,您只在执行调用之后初始化它。首先,让你的代码正确无误,无需担心时间:即一个函数,它建立或接收一个连接,并对该连接执行100或500次或任何数量的更新,然后关闭该连接。一旦您的代码工作正常,就是考虑在其上使用
timeit
的正确点!具体来说,如果要计时的函数是一个没有参数的函数,称为
foobar
,则可以使用timeit.timeit(2.6或更高版本——在2.5及之前更复杂):您最好指定运行的次数,因为对于您的用例,默认值一百万可能很高(导致在这段代码中花费大量时间;-)。
相关问题 更多 >
编程相关推荐