【问题标题】:Calling function using Timeit使用 Timeit 调用函数
【发布时间】:2023-03-04 04:08:01
【问题描述】:

我正在尝试在 python 中计时几件事,包括上传到 Amazon 的 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)

【问题讨论】:

    标签: python timeit


    【解决方案1】:

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

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

    请注意,根据您的平台,您可能想改用 time.clock()(请参阅 Stack Overflow 问题,例如 thisthis),如果您使用的是 Python 3.3,那么您有 better options ,由于PEP 418

    【讨论】:

    • 这要容易得多。非常感谢!
    • 感谢您的建议。来自 .NET/C# 背景,我发现 timeit 非常不直观,尤其是对于大型函数和代码块。只是想补充一点——我目前使用的是 Python 3.8,发现函数 time.time_ns() 非常有用。 docs.python.org/3/library/time.html#time.time
    【解决方案2】:

    您可以使用命令行界面timeit

    只需将您的代码保存为一个没有计时的东西。例如:

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

    然后你可以从命令行运行计时代码,像这样:

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

    另见:

    【讨论】:

    • 我确信这很好用,但它比我正在寻找的要复杂一些。我真的想添加几行来测试功能(模块)的一部分,而不是显着改变我的代码。不过谢谢,我相信这下次会派上用场的。
    猜你喜欢
    • 2013-12-20
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多