Ускорение начального выполнения приложения командной строки Python

Я создал прототип приложения командной строки для быстрого создания заметок с использованием Python и argparse . Прямо сейчас он просто запускает Vim, а затем помещает буфер в базу данных SQLite.

Проблема в том, что загрузка Python выполняется медленно на обеих моих машинах (Intel Core 2 Duos с частотой ~ 2 ГГц / 3 ГГц), а выполнение основных функций (печать меню справки при запуске) может занять секунду. . Я знаю, что мой код в порядке, потому что Python работает очень быстро, а интерактивный режим работает мгновенно после загрузки Python, но я могу имитировать свое раздражение простым словом Hello:

$ time python -c "print 'hello world'"
hello world
real    0m0.669s
user    0m0.070s
sys     0m0.041s

Конечно, проблема не уникальна для Python:

$ time erl -noshell -eval 'io:fwrite("Hello, World!\n"), init:stop().'
Hello, World!
real    0m2.824s
user    0m0.253s
sys     0m0.104s

Мой вопрос: Как я могу ускорить начальное выполнение приложения Python? Я хочу, чтобы моя программа выглядела как git или wc .

Система: Я столкнулся с этой проблемой с python2.6 в OS X 10.6.8 и с python2.7 в OS X 10.7.2.

Примечание. Последующие исполнения python erl ) выполняются намного быстрее, но я уже пытаюсь исправить эту программу и хочу, чтобы она была действительно быстрой.

Обновление: Я пробовал запустить pypy и обнаружил, что время начальной загрузки у него такое же, как у python2.6 и 2.7 в обеих моих системах (~ 0,5 секунды при начальной загрузке), половина производительность при последующих вызовах по сравнению с python2.6 в OS X 10.6.8 (~ 0,08 сек для pypy, ~ 0,35 сек для 2.6) и аналогичная производительность при последующих вызовах по сравнению с python2.7 в OS X 10.7.2 (~ 0,08 сек для pypy и python2.7).

Обновление 2: Вывод из предложения доктора Джимбоба (похоже, что время начальной загрузки сокращается на 2/3) -

$ python -vSEc "print 'hello world'"
# installing zipimport hook
import zipimport # builtin
# installed zipimport hook
import encodings # directory /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/encodings
# /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/encodings/__init__.pyc matches /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/encodings/__init__.py
import encodings # precompiled from /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/encodings/__init__.pyc
# /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/codecs.pyc matches /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/codecs.py
import codecs # precompiled from /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/codecs.pyc
import _codecs # builtin
# /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/encodings/aliases.pyc matches /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/encodings/aliases.py
import encodings.aliases # precompiled from /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/encodings/aliases.pyc
# /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/encodings/utf_8.pyc matches /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/encodings/utf_8.py
import encodings.utf_8 # precompiled from /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/encodings/utf_8.pyc
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
hello world
# clear __builtin__._
# clear sys.path
# clear sys.argv
# clear sys.ps1
# clear sys.ps2
# clear sys.exitfunc
# clear sys.exc_type
# clear sys.exc_value
# clear sys.exc_traceback
# clear sys.last_type
# clear sys.last_value
# clear sys.last_traceback
# clear sys.path_hooks
# clear sys.path_importer_cache
# clear sys.meta_path
# clear sys.flags
# clear sys.float_info
# restore sys.stdin
# restore sys.stdout
# restore sys.stderr
# cleanup __main__
# cleanup[1] zipimport
# cleanup[1] _codecs
# cleanup[1] signal
# cleanup[1] encodings
# cleanup[1] encodings.utf_8
# cleanup[1] encodings.aliases
# cleanup[1] exceptions
# cleanup[1] _warnings
# cleanup[1] codecs
# cleanup sys
# cleanup __builtin__
# cleanup ints: 3 unfreed ints
# cleanup floats

real    0m0.267s
user    0m0.009s
sys     0m0.043s

9
задан Cody Hess 18 October 2011 в 20:56
поделиться