面向人类和龙的python基准测试
nozdormu的Python项目详细描述
为人类和龙制定python基准。
功能
- 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准备好了
- 黄瓜