Python datetime库的主要替代者都有着相似的目标,易用/简单/用户友好.这些目标很赞,我很喜欢这些替代库,所以我投入了大量的精力去研究它们.这里我想研究的是,使用这些替代库会对程序的性能产生什么样的影响?
为什么要担心时间库的性能?因为时间库的使用无处不在.大量使用时间库的Web服务/数据库/数据处理程序,都对性能的要求十分苛刻.想想如果你正在为提高每秒请求数而发愁,而这时引进了一个库让性能下降了一半,我相信你一定会考虑换一个替代品的.
那些抱着"如果要效率,那你为什么用Python?"这样想法的人,一定没有听说过PyPy,不知道当今的Python程序的效率已经被优化到了何种程度.
我设置了一个标准来比对Python是时间库的替代品,datetime, Arrow, Pendulum, Delorean 和 udatetime.我选择了4个典型的性能指标来测量这些库的效率.解析一个时间字符串
序列化一个时间字符串
在UTC时间下实例化当前时间的对象
在本地时间下实例化当前时间的对象
在UTC时间下从时间戳计算一个时间的对象
在本地时间下从时间戳计算一个时间的对象
坦率地说,udatetime这个库的主要目的就是优化性能.这里把它拉进来做对比,是为了展示性能优化可以做到什么程度.
这个性能测试的执行环境是Python2.7, PyPy和Python3.5.测试代码每轮会被运行一百万次,结果取3轮的最小值.