首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Pythons timeit对代码段进行计时以测试性能?

如何使用Pythons timeit对代码段进行计时以测试性能?
EN

Stack Overflow用户
提问于 2010-05-19 22:24:46
回答 6查看 256.1K关注 0票数 205

我有一个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所需的时间。其目的是使用不同的索引和调优机制为我的数据库测试update语句。

EN

回答 6

Stack Overflow用户

发布于 2014-03-03 07:27:00

如果您正在分析您的代码,并且可以使用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
票数 52
EN

Stack Overflow用户

发布于 2019-05-22 21:33:56

这里有一个对steven答案的简单包装。这个函数不会重复运行/求平均值,只是让你不必到处重复计时代码:)

'''function which prints the wall time it takes to execute the given command'''
def time_func(func, *args): #*args can take 0 or more 
  import time
  start_time = time.time()
  func(*args)
  end_time = time.time()
  print("it took this long to run: {}".format(end_time-start_time))
票数 4
EN

Stack Overflow用户

发布于 2015-12-19 19:07:45

我看到这个问题已经得到了回答,但还是想补充一下我的2美分。

我也遇到过类似的情况,我必须测试几种方法的执行时间,因此编写了一个小脚本,对其中编写的所有函数调用timeit。

该脚本也可以作为github gist here使用。

希望它能帮助你和其他人。

from random import random
import types

def list_without_comprehension():
    l = []
    for i in xrange(1000):
        l.append(int(random()*100 % 100))
    return l

def list_with_comprehension():
    # 1K random numbers between 0 to 100
    l = [int(random()*100 % 100) for _ in xrange(1000)]
    return l


# operations on list_without_comprehension
def sort_list_without_comprehension():
    list_without_comprehension().sort()

def reverse_sort_list_without_comprehension():
    list_without_comprehension().sort(reverse=True)

def sorted_list_without_comprehension():
    sorted(list_without_comprehension())


# operations on list_with_comprehension
def sort_list_with_comprehension():
    list_with_comprehension().sort()

def reverse_sort_list_with_comprehension():
    list_with_comprehension().sort(reverse=True)

def sorted_list_with_comprehension():
    sorted(list_with_comprehension())


def main():
    objs = globals()
    funcs = []
    f = open("timeit_demo.sh", "w+")

    for objname in objs:
        if objname != 'main' and type(objs[objname]) == types.FunctionType:
            funcs.append(objname)
    funcs.sort()
    for func in funcs:
        f.write('''echo "Timing: %(funcname)s"
python -m timeit "import timeit_demo; timeit_demo.%(funcname)s();"\n\n
echo "------------------------------------------------------------"
''' % dict(
                funcname = func,
                )
            )

    f.close()

if __name__ == "__main__":
    main()

    from os import system

    #Works only for *nix platforms
    system("/bin/bash timeit_demo.sh")

    #un-comment below for windows
    #system("cmd timeit_demo.sh")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2866380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档