使用Timeit调用函数

时间:2013-07-03 20:33:01

标签: python timeit

我正在尝试在python中计算一些时间,包括上传时间到亚马逊的S3云存储,并且遇到了一些麻烦。我可以计算我的哈希值和其他一些东西,但不能上传。我以为this帖子最后会把我带到那里,但我似乎无法找到救恩。任何帮助,将不胜感激。非常新的python,谢谢!

import timeit

accKey = r"xxxxxxxxxxx";
secKey = r"yyyyyyyyyyyyyyyyyyyyyyyyy";

bucket_name = 'sweet_data'

c = boto.connect_s3(accKey, secKey)
b = c.get_bucket(bucket_name);
k = Key(b);

p = '/my/aws.path'
f = 'C:\\my.file'

def upload_data(p, f):
    k.key = p
    k.set_contents_from_filename(f)
    return

t = timeit.Timer(lambda: upload_data(p, f), "from aws_lib import upload_data; p=%r; f = %r" % (p,f))

# Just calling the function works fine
#upload_data(p, f)

2 个答案:

答案 0 :(得分:1)

我知道这在Python社区中是异端,但我实际上建议使用而不是来使用timeit,尤其是对于这样的事情。出于您的目的,我相信如果您只是使用timeit来计算时间,它就足够了(甚至可能比time.time()更好!)。换句话说,做一些像

这样的事情
from time import time

t0 = time()
myfunc()
t1 = time()
print t1 - t0

请注意,根据您的平台,您可能需要尝试time.clock()(请参阅堆栈溢出问题,例如thisthis),如果您使用的是Python 3.3,由于better options,你有PEP 418

答案 1 :(得分:1)

您可以使用命令行界面timeit

只需将代码保存为模块,而无需计时。例如:

# file: test.py
data = range(5)
def foo(l):
    return sum(l)

然后您可以从命令行运行计时代码,如下所示:

$ python -mtimeit -s 'import test;' 'test.foo(test.data)' 

另见: