如何计算我的方法运行多长时间?

时间:2018-04-07 03:46:43

标签: python

我有一个有多种方法的程序。我想测量每个方法在调用时运行所需的时间。

例如

def func1:
  blah

def func2:
  blah


def main:
  call func1 and func2 and measure their times

有一种简单的方法可以做到。

3 个答案:

答案 0 :(得分:1)

这是我为自己写的代码时序设置,我使用的是python 2.7

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
    'simple': {
        # exact format is not important, this is the minimum information
        'format': '%(asctime)s %(name)-12s %(lineno)d %(levelname)-8s %(message)s',
    },
},
'handlers': {
    'console': {
        #'level': 'INFO',
        'class': 'logging.StreamHandler',
        'formatter': 'simple',
    },
    # Add Handler for mail_admins for `warning` and above
    'mail_admins': {
        'level': 'ERROR',
        'class': 'django.utils.log.AdminEmailHandler',
    },
    'file': {
        #'level': 'INFO',
        'class': 'logging.FileHandler',
        'formatter': 'simple',
        'filename': os.path.join(os.path.dirname(PROJECT_ROOT), 'crawler.admin.log'),
    },

},

'loggers': {
    # root logger
    '': {
        'level': 'INFO',
        'handlers': ['file', 'mail_admins'],
    },
    'scrapy': {
        'level': 'WARNING',
        'handlers': ['console', 'mail_admins'],
        'propagate': False,
    },
    'crawleradmin': {
        'level': 'INFO',
        'handlers': ['console', 'file', 'mail_admins'],
        # required to avoid double logging with root logger
        'propagate': False,
    },
},
}

答案 1 :(得分:1)

在测试功能时,我发现以下一块可重复使用的代码。

import timeit    

def timed_function(f, *args, **kwargs):
    myname = str(f).split(' ')[1]
    def new_func(*args, **kwargs):
        timer1 = timeit.default_timer()
        result = f(*args, **kwargs)
        timer2 = timeit.default_timer()
        delta = timer2 - timer1
        print('Function {} Time = {:6.3f}ms'.format(myname, delta*1000))
        return result
    return new_func

您可以使用它来装饰任何功能,然后每次运行它时都会打印原始功能的名称和执行时间。

这样的事情:

@timed_function
def func1():
    return sum([0.5 for i in range(10000)])

y = func1()

代码输出: Function func1 Time = 0.849ms

[我从here得到了这个想法。]

答案 2 :(得分:0)

如果您从单独的文件运行代码,perf_counter是可行的方法。例如,

from time import perf_counter

def main():
    start = perf_counter()
    # Do stuff.
    print(perf_counter() - start)

如果您在shell中测试代码,则有一种更简单的方法:timeit模块。它有两个主要功能:timeitrepeat。前者只是一个计时器,后者返回不同试验的时间列表。 https://docs.python.org/3/library/timeit.html?highlight=timeit#module-timeit 如果您使用的是导入函数,请确保将globals()作为globals参数传递!