Python datetime库的主要替代者都有着相似的目标,易用/简单/用户友好.这些目标很赞,我很喜欢这些替代库,所以我投入了大量的精力去研究它们.这里我想研究的是,使用这些替代库会对程序的性能产生什么样的影响? 为什么要担心时间库的性能?因为时间库的使用无处不在.大量使用时间库的Web服务/数据库/数据处理程序,都对性能的要求十分苛刻.想想如果你正在为提高每秒请求数而发愁,而这时引进了一个库让性能下降了一半,我相信你一定会考虑换一个替代品的. 那些抱着"如果要效率,那你为什么用Python?"这样想法的人,一定没有听说过PyPy,不知道当今的Python程序的效率已经被优化到了何种程度. 我设置了一个标准来比对Python是时间库的替代品,datetime, Arrow, Pendulum, Delorean 和 udatetime.我选择了4个典型的性能指标来测量这些库的效率.
坦率地说,udatetime这个库的主要目的就是优化性能.这里把它拉进来做对比,是为了展示性能优化可以做到什么程度. 这个性能测试的执行环境是Python2.7, PyPy和Python3.5.测试代码每轮会被运行一百万次,结果取3轮的最小值.
如果我们抛开在Python2.7和Python3.5上的结果,这样我们就可以比较在纯Python代码下的性能差距,因为在PyPy下面没有C语言代码优化的情况.这种情况下datetime比udatetime慢5倍,Arrow慢12倍,Delorean慢13倍,Pendulum慢18倍. 有人说,给代码做性能优化一定要能将性能提升一个数量级,这样才值得.我想上面的测试表明,udatetime的性能优化是值得的. 一个值得关注的测试结果是解析的性能,我认为Arrow 和 Pendulum在解析上比datetime慢是正常的,因为它们需要尝试更多的格式,但是没想到结果是这样的.
下面是在Python2.7和Python3.5下面的执行结果 我希望这篇文章清楚地说明了不同库之间的性能差距.你不必重新造轮子,但是你需要思考哪个轮子更合适你.
|
|
来自: River_LaLaLa > 《Python》