Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.4:普通脚本中的导入速度与execfile中的导入速度';d脚本_Python_Import_Sqlalchemy_Execfile - Fatal编程技术网

Python 2.4:普通脚本中的导入速度与execfile中的导入速度';d脚本

Python 2.4:普通脚本中的导入速度与execfile中的导入速度';d脚本,python,import,sqlalchemy,execfile,Python,Import,Sqlalchemy,Execfile,我刚刚偶然发现了一些对我来说毫无意义的东西。在我工作的地方,我们有很多PythonCGI网页(只是一个简单的Apache服务器设置,没有运行Django/Turbogears等),我对脚本运行的时间感到有点失望。我放弃了很多time.time()调用,并认为我已经将瓶颈确定为sqlalchemy的导入(尽管我现在认为它可能是“任何大模块”,所以sqlalchemy标签可能放错了位置) 因此,在尝试了各种不同的方法之后,我最终得到了这个示例(假设文件名为'test.py') 如果在命令提示符下运行

我刚刚偶然发现了一些对我来说毫无意义的东西。在我工作的地方,我们有很多PythonCGI网页(只是一个简单的Apache服务器设置,没有运行Django/Turbogears等),我对脚本运行的时间感到有点失望。我放弃了很多time.time()调用,并认为我已经将瓶颈确定为sqlalchemy的导入(尽管我现在认为它可能是“任何大模块”,所以sqlalchemy标签可能放错了位置)

因此,在尝试了各种不同的方法之后,我最终得到了这个示例(假设文件名为'test.py')

如果在命令提示符下运行test.py(通过将其设置为可执行),则该import语句通常显示约0.7秒(+/-0.1秒)

但是,如果我打电话

python -c "execfile('test.py')"
我得到了大约10倍的加速

所以我想我应该用一个调用

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提供的“EnterpriseLinuxServerRelease5(Carthage)”上运行Python2.4 64位版本。

我的猜测是,两者之间没有真正的区别。这看起来只是一个很大的区别。试着像这样测试它,以确保:

# 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

我无法在windows下用python 2.6/2.7/3.1在任何大模块上复制它(没有安装sqlalchemy)。需要检查的一些指针:“/usr/bin/python”和“python”真的是同一个解释器吗?SqlAlchemy是否在
\uuuuu main\uuuuuu
模块或其全局/局部(其行为与execfile()不同)上进行了一些恶作剧?是的,他们都指向同一个可执行文件-我开始认为我们的设置一定有问题,因为你和WoLpH无法复制它,如果它是通用的,我不敢相信我是第一个找到它的人!(在一个规格相当好(而且目前负载不是很重)的服务器上导入sqalchemy几乎需要一秒钟的时间,但速度似乎慢得可笑)。我要和斯特拉斯玩,看看有没有什么不同。@FredL:你能查一下你从哪里得到的SQLAlchemy吗?也许是另一种安装方式或者别的什么<代码>导入sqlalchemy;打印sqlalchemy.\uuuu文件\uuuu
python-vv
将打印导入的解析方式。可能还有一些有趣的事情,您可能会遇到
.pyc
文件的写入权限问题。我自己也在想类似的事情,但是您可以使用firebug(对于实际的CGI页面,而不仅仅是此脚本)来测量响应时间的差异,这会产生真正的差异。当我像你建议的那样使用time命令时,直接方法的CPU使用率比execfile方法低得多(~35%比~75%)。
# 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