我偶然发现了对我毫无意义的事情。在我工作的地方,我们有许多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。
答案 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