Python 使用Timeit调用函数

Python 使用Timeit调用函数,python,timeit,Python,Timeit,我正在尝试用python计算一些时间,包括将时间上传到Amazon的S3云存储,但遇到了一点小麻烦。我可以计时我的散列和其他一些事情,但不能上传。我以为波斯特最终会把我带到那里,但我似乎找不到救赎。任何帮助都将不胜感激。非常新的python,谢谢 import timeit accKey = r"xxxxxxxxxxx"; secKey = r"yyyyyyyyyyyyyyyyyyyyyyyyy"; bucket_name = 'sweet_data' c = boto.connect_s

我正在尝试用python计算一些时间,包括将时间上传到Amazon的S3云存储,但遇到了一点小麻烦。我可以计时我的散列和其他一些事情,但不能上传。我以为波斯特最终会把我带到那里,但我似乎找不到救赎。任何帮助都将不胜感激。非常新的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)

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

from time import time

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

请注意,根据您的平台不同,您可能希望尝试使用
time.clock()
(请参阅堆栈溢出问题,如and),如果您使用的是Python 3.3,则由于。

您可以使用命令行界面来
timeit

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

# file: test.py
data = range(5)
def foo(l):
    return sum(l)
然后可以从命令行运行计时代码,如下所示:

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


这要容易得多。谢谢!谢谢你的建议。来自.NET/C#背景的我发现
timeit
非常不直观,尤其是对于大型函数和代码块。只想补充一点——我目前使用的是Python3.8,发现函数
time.time\ns()
非常有用。我确信这很有效,但它比我想要的要复杂一点。我真的希望添加几行代码来测试函数(模块)的某些部分,而不是显著地修改代码。不过谢谢你,我相信下次这个会派上用场的。