面向人类和龙的python基准测试

nozdormu的Python项目详细描述


为人类和龙制定python基准。

https://img.shields.io/pypi/v/nozdormu.svg?style=flat-squarehttps://img.shields.io/pypi/dm/nozdormu.svg?style=flat-square

功能

  • unittest样式基准测试设置(testcase->;benchbatch)
  • setUp/tearDown从计时中排除
  • 即使是非常快的基准测试,也要精确,至少要运行1毫秒 或16次,以较长者为准
  • 计时到纳秒
  • 批处理中的基准测试是交错运行的,以减少随机加载带来的抖动
  • 手动GC以防止干扰基准
  • 结果保存到人类可读的json文件中,并用作 未来测试
  • 仅需几毫秒的开销

要求

  • Python2.6+/3.2+

用法示例

importnozdormuclassMyBenchBatch(nozdormu.BenchBatch):defbench_one(self):passdefbench_two(self):passclassAnActualBenchBatch(nozdormu.BenchBatch):defsetUp(self):importrandomself.r=randomdefbench_list_creation(self):l=[]foriinrange(100):l.append(i)defbench_random_addition(self):l=[]foriinrange(100):l.append(self.r.randint(0,100))defbench_import_math(self):importmathif__name__=='__main__':nozdormu.main()

收益率

Starting benchmark session

  Running Batch: AnActualBenchBatch
    bench_random_addition: 152μs (2ms / 16 runs) (-6μs / 3.6%)
    bench_list_creation: 8μs (1ms / 127 runs) (-85ns / 1.1%)
    bench_import_math: 954ns (1ms / 1049 runs) (new)
  Batch finished, time: 12ms

  Running Batch: MyBenchBatch
    bench_one: 236ns (1ms / 4243 runs) (-13ns / 5.4%)
    bench_two: 232ns (1ms / 4305 runs) (-6ns / 2.7%)
  Batch finished, time: 9ms

Benchmarking finished
2 batches, 5 benchmarks
total time: 23ms

如果你的终端支持的话,可以用一些黄瓜的颜色。

用法

正如你在上面看到的,你几乎没有什么事可做。总体结构 与单元测试非常相似。首先是import nozdormu,然后是子类 nozdormu.BenchBatch您需要的频率。每批可以容纳 你需要的基准。

要执行基准测试,必须从“bench”开始(就像unittests必须 从“test”开始,就像在unittests中一样,可以重写类 方法设置和拆卸准备和/或模拟。这两个 函数在每次基准测试执行之前和之后运行,并且 不包括在基准时间内(但包括在总时间内)。

不到1毫秒的基准测试将重复执行,直到 累积至少1毫秒的总运行时间。这是按批次进行的 而一批的基准将轮换,直到它们都运行足够长的时间。这个 应该能很快地减少来自其他系统负载的抖动 基准。

致谢

创意和灵感来源:

  • python的unittest和timeit模块
  • GRB准备好了
  • 黄瓜

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在JTable上以逗号显示值   Maven NoSuchMethodError:void com。谷歌。常见的基础先决条件。checkArgument(布尔、java.lang.String、java.lang.Object)   SonarQube是用于验证代码的Java版本   java无法获取gps位置   java NetBeans 7.0中的绑定组问题   java Android向文件内部存储添加多行   java中的Xml解析问题   java侦听器问题和符号错误   方法模式上的java正则表达式。编译()   Raspberry Pi应用程序的java信息网页   java为计算器拆分输入字符串   如何使此文件i/O Java程序在Unix中运行?   java Hibernate:奇怪的ID设置   JavaMaven/Netbeans:子模块中的开源文件   来自父活动的java更新私有ListFragment   带有构造函数的Java对象数组   java以编程方式向LinearLayout添加多个组件   java如何以编程方式设置安卓系统时间?