datetime/Arrow/Pendulum/Delorean/udatetime
datetime/Arrow/Pendulum/Delorean/udatetime。
Pythondatetime库的主要替代者都有着相似的目标,易用/简单/用户友好.这些目标很赞,我很喜欢这些替代库,所以我投入了大量的精力去研究它们.这里我想研究的是,使用这些替代库会对程序的性能产生什么样的影响?
为什么要担心时间库的性能?因为时间库的使用无处不在.大量使用时间库的Web服务/数据库/数据处理程序,都对性能的要求十分苛刻.想想如果你正在为提高每秒请求数而发愁,而这时引进了一个库让性能下降了一半,我相信你一定会考虑换一个替代品的.
那些抱着"如果要效率,那你为什么用Python?"这样想法的人,一定没有听说过PyPy,不知道当今的Python程序的效率已经被优化到了何种程度.
我设置了一个标准来比对Python是时间库的替代品,datetime,Arrow,Pendulum,Delorean和udatetime.我选择了4个典型的性能指标来测量这些库的效率.
解析一个时间字符串
序列化一个时间字符串
在UTC时间下实例化当前时间的对象
在本地时间下实例化当前时间的对象
在UTC时间下从时间戳计算一个时间的对象
在本地时间下从时间戳计算一个时间的对象
坦率地说,udatetime这个库的主要目的就是优化性能.这里把它拉进来做对比,是为了展示性能优化可以做到什么程度.
这个性能测试的执行环境是Python2.7,PyPy和Python3.5.测试代码每轮会被运行一百万次,结果取3轮的最小值.
无论使用什么解释器,结果都是差不多的.udatetime是最快的,在PyPy上尤甚.总体来看,datetime比udatetime慢了3倍,Arrow慢了10倍,Delorean慢了13倍,Pendulum慢了18倍.
如果我们抛开在Python2.7和Python3.5上的结果,这样我们就可以比较在纯Python代码下的性能差距,因为在PyPy下面没有C语言代码优化的情况.这种情况下datetime比udatetime慢5倍,Arrow慢12倍,Delorean慢13倍,Pendulum慢18倍.
有人说,给代码做性能优化一定要能将性能提升一个数量级,这样才值得.我想上面的测试表明,udatetime的性能优化是值得的.
一个值得关注的测试结果是解析的性能,我认为Arrow和Pendulum在解析上比datetime慢是正常的,因为它们需要尝试更多的格式,但是没想到结果是这样的.
如果你经常解析时间字符串,那你需要认真考虑下你要使用的工具了.在解析字符串时,datetime比udatetime慢4倍,Arrow慢16倍,Pendulum慢19倍,Delorean更是慢了20倍.这些库慢的原因一定程度上是因为底层都使用了dateutil.
我希望这篇文章清楚地说明了不同库之间的性能差距.你不必重新造轮子,但是你需要思考哪个轮子更合适你.
Python培训、Python培训班、Python培训机构,就选光环大数据!
还不够过瘾?想学习更多?点击 http://hadoop.aura.cn/python/ 进行Python学习!
大数据培训、人工智能培训、Python培训、大数据培训机构、大数据培训班、数据分析培训、大数据可视化培训,就选光环大数据!光环大数据,聘请专业的大数据领域知名讲师,确保教学的整体质量与教学水准。讲师团及时掌握时代潮流技术,将前沿技能融入教学中,确保学生所学知识顺应时代所需。通过深入浅出、通俗易懂的教学方式,指导学生更快的掌握技能知识,成就上万个高薪就业学子。 更多问题咨询,欢迎点击------>>>>在线客服!