我有一个有多种方法的程序。我想测量每个方法在调用时运行所需的时间。
例如
def func1:
blah
def func2:
blah
def main:
call func1 and func2 and measure their times
有一种简单的方法可以做到。
答案 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
模块。它有两个主要功能:timeit
和repeat
。前者只是一个计时器,后者返回不同试验的时间列表。 https://docs.python.org/3/library/timeit.html?highlight=timeit#module-timeit
如果您使用的是导入函数,请确保将globals()
作为globals
参数传递!