我有一个简单的python脚本,但它在一段时间内第一次运行时会显示更高的执行时间。如果我在几个因素之后立即执行它。
此脚本在没有运行应用程序的私有测试服务器上运行,因此我认为缺少系统资源导致其运行速度变慢。
#!/usr/bin/env python
import redis,time,sys
print "hello"
$ time python test.py
real 0m0.149s
user 0m0.072s
sys 0m0.076s
$ time python test.py
real 0m0.051s
user 0m0.020s
sys 0m0.028s
任何人都可以解释执行时间的差异吗?
我对包含外部脚本的php脚本进行了类似的测试,并且该脚本的执行时间差异可以忽略不计。
这种差异会影响我的应用程序,因为这样的脚本被多次调用并导致响应在70ms到450ms之间传递。
答案 0 :(得分:4)
可能有几个因素。我现在可以想到两个:
初始字节编译。
Python将编译后的字节码缓存在.pyc
文件中,首次运行时需要创建该文件,后续运行只需要验证字节码缓存上的时间戳。
磁盘缓存
Python解释器,你直接引用的3个库,那些库所使用的任何东西,都需要从磁盘加载,除了脚本和它的字节码缓存之外。操作系统会缓存此类文件以便更快地访问。
如果您在同一系统上运行其他内容,这些文件将从缓存中刷新,需要再次加载。
这同样适用于目录列表;检查在模块搜索路径中找到模块的位置以及字节码缓存的测试都由缓存的目录信息加速。
如果此类启动时间会影响您的应用程序,请考虑创建一个将这些任务作为服务提供服务的守护程序。 RPC调用(使用套接字或localhost网络连接)几乎总是会超过启动成本。消息队列可以为您提供此类守护程序的体系结构。