2013-07-03 33 views
1

我想在python中记录几件事情,包括上传到亚马逊S3云存储的时间,并且遇到了一些麻烦。我可以计算我的散列和其他一些东西,但不能上传。我认为this帖子最终会让我到那里,但我似乎无法找到救赎。任何帮助,将不胜感激。非常新的python,谢谢!使用Timeit调用函数

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) 

回答

1

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

from time import time 

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

请注意,根据您的平台,你可能想尝试time.clock()代替(见堆栈溢出的问题,如thisthis),如果你对Python的3.3,然后你有better options,由于PEP 418

+0

那非常容易。非常感谢! – user2407064

1

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

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

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

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

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

参见:

+0

我相信这很好,但比我想要的要复杂一点。我真的想要添加几行来测试函数(模块)的某些部分,而不是显着改变我的代码。不过谢谢,我确信这会再次派上用场。 – user2407064