Ускоритель Python

Я планирую использовать Python для разработки веб-приложения. У кого-нибудь есть идеи о каком-либо ускорителе для python? (что-то вроде eAccelerator или apc для php), если нет, есть ли способ кэшировать предварительно скомпилированный байт-код python? Любая идея о сравнении производительности между python и php (при условии, что задержки db/network одинаковы)

Заранее спасибо.


person Community    schedule 01.09.2010    source источник


Ответы (4)


Другие упоминали файлы байт-кода Python, но это в значительной степени не имеет значения. Это связано с тем, что механизмы размещения для Python, за исключением CGI, сохраняют веб-приложение Python в памяти между запросами. Это отличается от PHP, который эффективно отбрасывает приложение между запросами. Таким образом, Python не нуждается в ускорителе, поскольку механизмы веб-хостинга Python позволяют избежать проблем, которые есть у PHP.

person Graham Dumpleton    schedule 01.09.2010

В этом есть хитрость.

Он называется mod_wsgi.

Суть его работы такова.

  1. Для «статического» содержимого (.css, .js, изображений и т. д.) поместите их в каталог, чтобы они обслуживались Apache, а ваша программа Python не знала, что они были отправлены.

  2. Для «динамического» контента (сама основная HTML-страница) вы используете mod_wsgi для разветвления «внутреннего» процесса, который выполняется вне Apache.

Это быстрее, чем PHP, потому что теперь происходит несколько вещей одновременно. Apache отправил запрос серверному процессу, а затем перешел к обработке следующего запроса, пока сервер все еще выполняет первый.

Кроме того, когда вы отправляете свою HTML-страницу, последующие запросы обрабатываются Apache, при этом ваша программа Python не знает и не заботится о том, что происходит. Это приводит к огромным ускорениям. Ничего общего со скоростью Python. Все, что связано с общей архитектурой.

person S.Lott    schedule 01.09.2010

Пока вы выполняете тривиальные объемы работы в своем «основном скрипте» (тот, который вы напрямую вызываете с помощью python и который получает __name__ из __main__), вам не нужно беспокоиться о «кэшировании предварительно скомпилированного байт-кода Python»: когда вы import foo, foo.py сохраняется на диске (в том же каталоге), что и foo.pyc, при условии, что этот каталог доступен для записи вами, поэтому и без того дешевая компиляция в байт-код происходит один раз, и «навсегда» Python загрузит foo.pyc непосредственно в каждый новый процесс, который выполняет import foo -- внутри одного процесса, каждый import foo, кроме первого, является просто быстрым поиском в словаре в памяти (словарь sys.module). Основная идея повышения производительности в Python: убедиться, что каждый фрагмент существенного кода выполняется внутри def инструкций в модулях — не на верхнем уровне модуля, в основном скрипте. , или спец. в пределах exec и eval операторов/выражений!-).

У меня нет эталонных тестов для PHP и Python, но я заметил, что Python продолжает довольно заметно оптимизироваться с каждым новым выпуском, поэтому убедитесь, что вы сравнили последний выпуск (в идеале 2.7, по крайней мере 2.6), если вы хотите увидеть «самые быстрые». Питон». Если вы еще не находите его достаточно быстрым, cython (диалект Python, предназначенный для компиляции непосредственно в C, а затем в машинный код, с некоторыми ограничениями) на сегодняшний день является самым простым способом выборочной оптимизации тех модулей, профилирование которых показывает, что вам это нужно.

person Alex Martelli    schedule 01.09.2010

Скомпилированный байт-код python автоматически кэшируется в файлах .pyc в каждой среде, которую я видел. Там так нужно сделать что-нибудь еще, насколько я знаю.

Если вы хотите сгенерировать эти файлы напрямую, вы можете использовать: http://docs.python.org/library/py_compile.html

person edorian    schedule 01.09.2010