mut*_*ity 2 python benchmarking
我必须对JSON序列化时间进行基准测试,并将其与thrift和google协议缓冲区的序列化时间进行比较.
它也必须在python中.
我打算使用python profilers. http://docs.python.org/2/library/profile.html
分析器是查找函数运行时的最佳方法吗?
或者输出时间戳之前和函数调用是更好的选择?
还是有更好的方法?
提前致谢!
从profile您链接到的文档:
注意探查器模块旨在为给定程序提供执行配置文件,而不是用于基准测试目的(为此,可以获得
timeit相当准确的结果).这特别适用于针对C代码对Python代码进行基准测试:分析器引入了Python代码的开销,但不是C级函数的开销,因此C代码似乎比任何Python代码都要快.
所以,不,你不想用来profile对你的代码进行基准测试.你想用什么profile的是要弄清楚为什么你的代码是太慢了,以后你已经知道,它是.
并且您不希望在函数调用之前和之后输出时间戳.如果您不小心(使用错误的时间戳函数,让GC在测试运行过程中运行循环收集,包括循环时序中的测试开销等),那么有太多事情你可能会出错. .),并timeit为您照顾所有这些.
像这样的东西是标记事物的常用方法:
for impl in 'mycode', 'googlecode', 'thriftcode':
t = timeit.timeit('serialize(data)',
setup='''from {} import serialize;
with open('data.txt') as f: data=f.read()
'''.format(impl),
number=10000)
print('{}: {}'.format(impl, t)
Run Code Online (Sandbox Code Playgroud)
(我在这里假设您可以编写三个模块,将三个不同的序列化工具包装在同一个API中,一个serialize函数接受一个字符串并使用它执行某些操作.显然,有不同的方法来组织事物.)