performance - 在 python 中,具有参数的函数的性能度量时间

  显示原文与译文双语对照的内容
113 3

我正在尝试测量 raw_queries(...)的时间,目前还没有。我发现我应该用时间模块。问题是我不能从环境中将参数传递给函数。

重要说明:在调用 raw_queries 之前,我们必须执行 phase2() ( 环境初始化) 。

附注:代码在 python 3中。

def raw_queries(queries, nlp):
""" Submit queries without getting visual response"""
 for q in queries:
 nlp.query(q)
def evaluate_queries(queries, nlp):
""" Measure the time that the queries need to return their results"""
 t = Timer("raw_queries(queries, nlp)","?????")
 print(t.timeit())
def phase2():
""" Load dictionary to memory and subsequently submit queries"""
 # prepare Linguistic Processor to submit it the queries
 all_files = get_files()
 b = LinguisticProcessor(all_files)
 b.loadDictionary()
 # load the queries
 queries_file = 'queries.txt'
 queries = load_queries(queries_file)
if __name__ == '__main__':
 phase2()

感谢你的帮助。

更新:我们可以使用 Timer的第二个参数调用 phase2()问题是我们需要来自环境的参数 (queries, nlp)

更新:迄今为止,在 unutbu ( 。只有已经更改的内容)的帮助下,最好的解决方案:

def evaluate_queries():
""" Measure the time that the queries need to return their results"""
 t = Timer("main.raw_queries(queries, nlp)","import main;
 (queries,nlp)=main.phase2()")
 sf = 'Execution time: {} ms'
 print(sf.format(t.timeit(number=1000)))
def phase2():
. . .
 return queries, b
def main():
 evaluate_queries()
if __name__ == '__main__':
 main()
时间:原作者:0个回答

85 2

首先,永远不要使用时间模块来完成函数。它很容易导致错误的结论。参见时间与时间装饰器的例子。

最简单的时间调用函数调用是使用ipython命令的%timeit 。在这里,你只需启动交互式的IPython会话,调用 phase2(),定义 queries,然后运行

%timeit raw_queries(queries,nlp)

我知道使用时间的第二个简单方法是从命令行调用它:

python -mtimeit -s"import test; queries=test.phase2()""test.raw_queries(queries)"

( 在上面的命令中,我假设脚本被称为 test.py )

这里的成语是

python -mtimeit -s"SETUP_COMMANDS""COMMAND_TO_BE_TIMED"

为了能够将 queries 传递给 raw_queries 函数调用,你必须定义 queries 变量。在你发布的代码中,queries 是在 phase2() 中定义的,但只在本地定义。因此,要将 queries 设置为全局变量,你需要执行类似 phase2 返回 queries的操作:

def phase2():
. . .
 return queries

如果你不想这样搞乱 phase2,请创建一个虚函数:

def phase3():
 # Do stuff like phase2() but return queries
 return queries
原作者:
127 0

通常情况下,你会使用时间。

这里的例子是 ,这里是和。

还请注意:

默认情况下,timeit() 在计时期间暂时关闭垃圾收集。这种方法的优点在于,它使得独立计时更加容易。这个缺点是GC可能是被测函数性能的一个重要组成部分

或者你可以使用时间插件模块编写自己的自定义定时器。

如果使用定制定时器,请记住应该在 Windows 上使用 time.clock(),在其他平台上使用 time.time() 。( 时间内选择)

import sys
import time
# choose timer to use
if sys.platform.startswith('win'):
 default_timer = time.clock
else:
 default_timer = time.time
start = default_timer()
# do something
finish = default_timer()
elapsed = (finish - start)
原作者:
...