3

我有一个简单的 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 脚本进行了类似的测试,并且该脚本的执行时间差异可以忽略不计。

这种差异会影响我的应用程序,因为这样的脚本被多次调用并导致响应在 70 毫秒到 450 毫秒之间传递。

4

1 回答 1

4

可能有几个因素。我现在能想到的两个:

  1. 初始字节编译。

    Python 将编译后的字节码缓存在.pyc文件中,第一次运行时需要创建该文件,后续运行只需要验证字节码缓存上的时间戳。

  2. 磁盘缓存

    Python 解释器,你直接引用的 3 个库,这些库使用的任何东西,都需要从磁盘加载,除了脚本和它的字节码缓存。操作系统会缓存此类文件以加快访问速度。

    如果您在同一系统上运行其他东西,这些文件将从缓存中刷新并需要再次加载。

    这同样适用于目录列表;在模块搜索路径中查找模块的位置的检查和字节码缓存的测试都由缓存的目录信息加速。

如果此类启动时间影响您的应用程序,请考虑创建一个守护进程,将这些任务作为服务提供服务。RPC 调用(使用套接字或本地主机网络连接)几乎总能超过这些启动成本。消息队列可以为您提供此类守护程序的体系结构。

于 2013-04-03T08:38:40.640 回答