Python 2.4:正常脚本中的导入速度与execfile'd脚本中的导入速度

时间:2010-12-23 10:17:21

标签: python import sqlalchemy execfile

我偶然发现了对我毫无意义的事情。在我工作的地方,我们有许多Python CGI网页(只是一个简单的Apache服务器设置,没有运行Django / Turbogears等),我对脚本运行需要多长时间感到有点沮丧。我放了很多时间。时间()调用并且认为我已经确定了瓶颈作为sqlalchemy的导入(尽管我现在认为它可能是“任何大模块”因此sqlalchemy标签可能是错误的)。

所以,在尝试了各种不同的事情之后,我最终得到了这个例子,(假设该文件名为'test.py')

#!/usr/bin/python

import time
t1 = time.time()
import sqlalchemy
print time.time() - t1

如果我在命令提示符下运行test.py(通过将其设置为可执行文件),它通常会显示该导入语句约0.7秒(+/- 0.1秒)。

但是,如果我打电话

python -c "execfile('test.py')"

我加速了大约10倍

所以我想我会用一些调用

的小tcsh脚本包装一些我的python CGI脚本
python -c "execfile('mypythoncgiscript.py')"

我的加速通常大约是2-3倍,而且重要的是,返回的数据仍然是正确的。

使用cpu-heavy而不是import-heavy脚本,例如:

t1 = time().time()
a = 0
for i in xrange(10000000):
    a += 1
print time.time() - t1

我使用execfile得到了一个非常轻微的减速,这是我从微软的exec文件开销中所期望的。

有谁知道这里发生了什么?任何人都可以重现类似的速度差异或我的设置被破坏execfile以某种方式修复?我认为execfile中的导入行为略有不同(或者至少,一旦你离开execfile语句就不一定可见)但是我对速度的这么大差异感到惊讶。

我在Oracle提供的“Enterprise Linux Server release 5(Carthage)”上运行python 2.4 64bit。

1 个答案:

答案 0 :(得分:0)

我的猜测是没有真正的区别。它看起来只是一个很大的区别。请尝试并测试它,以确保:

# time python test.py
0.0514879226685
python test.py  0.06s user 0.01s system 95% cpu 0.071 total

# time python -c 'execfile
0.0515019893646
python -c 'execfile("test.py")'  0.06s user 0.01s system 95% cpu 0.071 total