Ускорение первоначального выполнения приложения командной строки Python
Я прототипировал приложение командной строки для быстрого заметок с использованием Python и argparse . Сейчас он просто запускает Vim, а затем перетаскивает буфер в базу данных SQLite.
Проблема в том, что загрузка Python медленна на обеих моих машинах (~ 2 / 3GHz Intel Core 2 Duos), а самая базовая функциональность (печать меню справки при запуске) может занять более секунды. Я знаю, что мой код в порядке, потому что Python работает очень быстро, и интерактивный режим мгновенно загружается, когда Python загружается, но я могу подражать моему раздражению простым Hello Word:
$ 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 на обеих моих системах (~ .5 секунд при начальной загрузке), половина производительности при последующих вызовах по сравнению с python2.6 на ОС X 10.6.8 (~ .08s для pypy, ~ .35s для 2.6) и аналогичная производительность при последующих вызовах по сравнению с python2.7 на OS X 10.7.2 (~ .08s для pypy и python2.7).
Обновление 2: выход из предложения dr jimbob (это, похоже, сокращает начальное время загрузки на 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
- Функция Python в командной строке не работает
- Можно ли запускать python SimpleHTTPServer только на localhost?
- Создание терминальной программы с помощью Python
- Mac psql / readline – библиотека не загружена
- Выполнение многострочных операторов Python в однострочной командной строке
Вы можете использовать аналогичную технику, используемую печально известным «Microsoft Start Quick Start» или «Java Quick Start», а также IIRC даже «Adobe Fast-something» …
Трюк состоит в том, чтобы все время хранить все библиотеки программы в кеше диска.
Вы можете получить его с помощью простой команды crontab, запрограммированной для запуска один раз в час. Точные детали будут зависеть от вашей системы, но должны работать с чем-то вроде:
$ crontab -e 0 * * * * python -c 'pass'
Хотя для меня более эффективным вы должны написать простой скрипт Python, который импортирует все модули, которые использует ваша программа, а затем просто заканчивается.
- Как определить взаимоисключающую группу из двух позиционных аргументов?
- Как закрыть подпроцесс Python 2.5.2 Popen, когда у меня есть данные, которые мне нужны?
- Командная строка Windows Не работает с Python
- Control-Alt-Delete из python или командной строки
- Поверните приложение или скрипт в команду оболочки
- Как я могу отлаживать POST-запросы с помощью BaseHTTPServer / SimpleHTTPServer python?
- Как поймать вывод функции matlab из python
- Пауза в Python
- проверка JSON из командной строки с использованием `python -m jsontool` дает« Нет объекта JSON, который может быть декодирован »
- Bash: переменная в одиночной кавычке
- Как создать функцию «cmd» в Python?