Python 2.4:普通脚本中的导入速度与 execfiled 脚本中的导入速度
我刚刚偶然发现了一些对我来说毫无意义的事情。在我工作的地方,我们有许多 Python CGI 网页(只是一个简单的 Apache 服务器设置,不运行 Django / Turbogears 等),我对脚本运行所需的时间感到有点沮丧。我放弃了很多 time.time() 调用,并认为我已将瓶颈确定为 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 的脚本而不是占用大量导入的脚本,例如:
t1 = time().time()
a = 0
for i in xrange(10000000):
a += 1
print time.time() - t1
使用 execfile 时速度会稍微变慢,这是我从 execfile 的轻微开销中所期望的。
有谁知道这是怎么回事?任何人都可以重现类似的速度差异,或者我的设置是否以 execfile 以某种方式修复的方式被破坏?我认为导入在 execfile 中的行为略有不同(或者至少,一旦离开 execfile 语句就不一定可见),但我对速度上如此大的差异感到惊讶。
我在 Oracle 提供的“企业 Linux 服务器版本 5 (Carthage)”上运行 python 2.4 64 位。
I've just stumbled across something that makes no sense to me. Where I work, we have a number of Python CGI webpages (just a simple Apache server setup, not running Django / Turbogears or the like) and I've been getting a bit frustrated with how long it takes the scripts to run. I chucked lots of time.time() calls and thought I'd identified the bottleneck as the import of sqlalchemy (though I now think it's probably "any big module" so the sqlalchemy tag is perhaps misplaced).
So, after trying various different things, I ended up with this example, (assume the file's called 'test.py')
#!/usr/bin/python
import time
t1 = time.time()
import sqlalchemy
print time.time() - t1
If I run test.py at the command prompt (by setting it executable), it typically shows about 0.7 seconds (+/- 0.1 seconds) for that import statement.
But, if I call
python -c "execfile('test.py')"
I get a speed up of about a factor of 10
So I thought I'd wrap some of my python CGI scripts with a little tcsh script that calls
python -c "execfile('mypythoncgiscript.py')"
and I get speed-ups typically about a factor of 2-3, and, importantly, the data returned is still correct.
With a cpu-heavy rather than import-heavy script, e.g:
t1 = time().time()
a = 0
for i in xrange(10000000):
a += 1
print time.time() - t1
I get a very slight slowdown using execfile, which is what I would have expected from the slight execfile overhead.
Does anyone know what's going on here? Can anyone reproduce similar speed differences or is my setup broken in a way that execfile somehow fixes? I thought imports behaved slightly differently within execfile (or at least, aren't necessarily visible once you've left the execfile statement) but I'm surprised by such a large difference in speed.
I'm running python 2.4 64bit on Oracle-supplied "Enterprise Linux Server release 5 (Carthage)".
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我的猜测是没有真正的区别。只是看起来差别很大。尝试像这样测试它以确保:
My guess is that there is no real difference. It only looks like a big difference. Try and test it like this to be sure: