首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取Python2.7中代码块的执行时间

获取Python2.7中代码块的执行时间
EN

Stack Overflow用户
提问于 2013-03-30 00:15:08
回答 6查看 96.2K关注 0票数 83

我想测量评估Python程序中的一段代码所用的时间,可能分为用户cpu时间、系统cpu时间和已用时间。

我知道timeit模块,但我有很多自己编写的函数,在安装过程中传递它们并不是很容易。

我更想要一些可以使用的东西,比如:

代码语言:javascript
复制
#up to here I have done something....
start_counting() #or whatever command used to mark that I want to measure
                   #the time elapsed in the next rows
# code I want to evaluate
user,system,elapsed = stop_counting() #or whatever command says:
                                      #stop the timer and return the times

用户和系统CPU时间不是必须的(尽管我想测量它们),但是对于经过的时间,我希望能够做这样的事情,而不是使用复杂的命令或模块。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-03-30 00:19:01

要获得以秒为单位的运行时间,可以使用timeit.default_timer()

代码语言:javascript
复制
import timeit
start_time = timeit.default_timer()
# code you want to evaluate
elapsed = timeit.default_timer() - start_time

使用timeit.default_timer()代替time.time()time.clock(),因为它将为任何平台选择具有更高分辨率的计时功能。

票数 172
EN

Stack Overflow用户

发布于 2013-03-30 00:36:15

我总是使用装饰器为现有函数做一些额外的工作,包括获取执行时间。它是pythonic式的,简单的。

代码语言:javascript
复制
import time

def time_usage(func):
    def wrapper(*args, **kwargs):
        beg_ts = time.time()
        retval = func(*args, **kwargs)
        end_ts = time.time()
        print("elapsed time: %f" % (end_ts - beg_ts))
        return retval
    return wrapper

@time_usage
def test():
    for i in xrange(0, 10000):
        pass

if __name__ == "__main__":
    test()
票数 27
EN

Stack Overflow用户

发布于 2016-05-25 14:57:23

您可以通过Context Manager来实现这一点,例如:

代码语言:javascript
复制
from contextlib import contextmanager
import time
import logging
@contextmanager
def _log_time_usage(prefix=""):
    '''log the time usage in a code block
    prefix: the prefix text to show
    '''
    start = time.time()
    try:
        yield
    finally:
        end = time.time()
        elapsed_seconds = float("%.2f" % (end - start))
        logging.debug('%s: elapsed seconds: %s', prefix, elapsed_seconds)

使用示例:

代码语言:javascript
复制
with _log_time_usage("sleep 1: "):
    time.sleep(1)
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15707056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档