首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有什么简单的方法来测试python脚本吗?

有什么简单的方法来测试python脚本吗?
EN

Stack Overflow用户
提问于 2018-03-16 00:40:44
回答 2查看 0关注 0票数 0

通常我使用shell命令。time...。我的目的是测试数据是小的、中的、大的还是非常大的集合,需要多少时间和内存使用。

Linux或python有什么工具可以这样做吗?

EN

回答 2

Stack Overflow用户

发布于 2018-03-16 09:15:43

时差

代码语言:txt
复制
def test():
    """Stupid test function"""
    lst = []
    for i in range(100):
        lst.append(i)

if __name__ == '__main__':
    import timeit
    print(timeit.timeit("test()", setup="from __main__ import test"))

本质上,您可以将python代码作为字符串参数传递给它,它将在指定的时间内运行并打印执行时间。文档中的重要部分:

timeit.timeit(stmt='pass', setup='pass', timer=<default timer>, number=1000000)创建一个Timer实例,设置代码和定时器函数并运行其timeit方法执行死刑。

...而且:

Timer.timeit(number=1000000)时间执行主要声明。它只执行一次Setup语句,然后返回执行主语句所需的时间,多次执行,以秒为单位作为浮点数计算。参数是循环的次数,默认为一百万次。将主语句、安装语句和要使用的计时器函数传递给构造函数。默认情况下,timeit暂时关闭garbage collection在时间安排上。这种方法的优点是它使独立的时间更具有可比性。这个缺点是GC可能是被测量函数的性能的一个重要组成部分。如果是,则可以将gc重新启用为设置绳子。例如:timeit.Timer('for i in xrange(10): oct(i)', 'gc.enable()').timeit()

侧写

剖析会给你一个关于发生了什么的更详细的想法。下面是“即时例子”官方文件:

代码语言:txt
复制
import cProfile
import re
cProfile.run('re.compile("foo|bar")')

这会给你:

代码语言:txt
复制
      197 function calls (192 primitive calls) in 0.002 seconds

Ordered by: standard name

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     1    0.000    0.000    0.001    0.001 <string>:1(<module>)
     1    0.000    0.000    0.001    0.001 re.py:212(compile)
     1    0.000    0.000    0.001    0.001 re.py:268(_compile)
     1    0.000    0.000    0.000    0.000 sre_compile.py:172(_compile_charset)
     1    0.000    0.000    0.000    0.000 sre_compile.py:201(_optimize_charset)
     4    0.000    0.000    0.000    0.000 sre_compile.py:25(_identityfunction)
   3/1    0.000    0.000    0.000    0.000 sre_compile.py:33(_compile)

这两个模块都应该让您了解在哪里查找瓶颈。

愈伤图

这个模块使用Graphviz创建调用图,如下所示:

你可以很容易地看到哪条路在颜色上消耗的时间最多。您可以使用pycallGraphAPI创建它们,也可以使用打包的脚本:

代码语言:txt
复制
pycallgraph graphviz -- ./mypythonscript.py

不过,开销相当大。因此,对于已经长期运行的进程,创建图形可能需要一些时间。

票数 0
EN

Stack Overflow用户

发布于 2018-03-16 10:06:58

我用一个简单的装饰器来计时

代码语言:txt
复制
def st_time(func):
    """
        st decorator to calculate the total time of a func
    """

    def st_func(*args, **keyArgs):
        t1 = time.time()
        r = func(*args, **keyArgs)
        t2 = time.time()
        print "Function=%s, Time=%s" % (func.__name__, t2 - t1)
        return r

    return st_func
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003626

复制
相关文章

相似问题

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