Я только что наткнулся на то, что не имеет смысла для меня.Там, где я работаю, у нас есть несколько веб-страниц 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
Так что я решил обернуть некоторые из моих CGI-скриптов Python небольшим tcsh-скриптом, который вызывает
python -c "execfile('mypythoncgiscript.py')"
, и я получаю ускорения, как правило, в 2-3 разаи, что важно, возвращаемые данные все еще верны.
С помощью сценария с интенсивным использованием процессора, а не с тяжелым импортом, например:
t1 = time().time()
a = 0
for i in xrange(10000000):
a += 1
print time.time() - t1
Я получаю очень небольшое замедление при использовании execfile, чего я и ожидал от незначительных накладных расходов execfile.
Кто-нибудь знает, что здесь происходит?Может кто-нибудь воспроизвести подобные различия в скорости или моя установка сломана таким образом, что execfile каким-то образом исправляет?Я думал, что импорт ведет себя немного по-другому в execfile (или, по крайней мере, не обязательно виден после того, как вы оставили оператор execfile), но я удивлен такой большой разницей в скорости.
Я бегуPython 2.4 64bit на поставляемой Oracle «Корпоративный Linux Server версии 5 (Карфаген)».