关于python:使用Timeit调用函数

Calling function using Timeit

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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)


您可以使用timeit的命令行界面。

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

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

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

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

也可以看看:

  • http://docs.python.org/2/library/timeit.html#command-line-interface
  • http://docs.python.org/2/library/timeit.html#examples


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

1
2
3
4
5
6
from time import time

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

请注意,根据您的平台,您可能需要尝试time.clock()(请参阅Stack Overflow问题,例如this和this),如果您使用的是Python 3.3,那么由于PEP 418,您有更好的选择。