Зачем избегать CGI для Python с хостом LAMP?

Я много лет использую PHP. В последнее время я столкнулся с многочисленными сообщениями на форуме о том, что PHP устарел , что современные языки программирования проще, безопаснее и т. Д.

Итак, я решил начать изучать Python . Поскольку я привык использовать PHP, я только начал создавать страницы, загрузив файл .htaccess с помощью:

addtype text/html py addhandler cgi-script .py 

Затем мои образцы страниц выглядят так:

 #! / USR / бен / питон
 print "content-type: text / html \ n \ n"
 печать "html-тегов, больше материала и т. д."

Это прекрасно работает. Но я столкнулся с комментарием в сообщении, в котором говорилось, что CGI не лучший способ использовать Python . Конечно, в нем не упоминалось, что является лучшим способом.

Почему использование CGI не лучший способ использовать Python? Какая альтернатива?

Есть ли какой-то совершенно другой способ создать простой сайт Python? Есть ли какая-то совершенно другая парадигма, которую я должен смотреть за пределами файлов .htaccess и .py?

Связанный

  • Плюсы и минусы различных подходов к веб-программированию на Python
  • Какая хорошая легкая инфраструктура MVC Python? (особенно, @ Кевин Дангур )
  • Как использовать python для веб-разработки, не полагаясь на структуру?
  • Веб-инфраструктура Python – не приложение Framework или CMS Framework
  • Веб-программирование на Python

Классический CGI – это не лучший способ использовать что-либо вообще. С классическим сервером CGI необходимо создать новый процесс для каждого запроса .

Что касается Python, у вас мало альтернатив:

  • mod_wsgi
  • mod_python
  • FastCGI
  • автономный веб-сервер Python ( встроенный , CherryPy , Tracd )
  • автономный веб-сервер Python на нестандартном порту и mod_proxy в Apache

Почему использование CGI не лучший способ использовать Python?

Я немного задержусь за CGI. Это хорошо для среды разработки.

Это легко подключить, и вам не нужно беспокоиться о проблемах перезагрузки модуля. Естественно производительность ужасна, но для дева вам все равно.

Конечно, вы действительно должны писать на интерфейс WSGI, а не непосредственно CGI. Затем вы можете развернуть через CGI, используя:

 wsgiref.handlers.CGIHandler().run(application) 

и использовать один и тот же объект приложения для развертывания через mod_wsgi другого любого другого сервера WSGI, который вы предпочитаете в производственной среде, где важна скорость (и в тестовой среде, где вы хотите, чтобы она была как можно ближе к производству).

mod_wsgi – подходящая альтернатива. Это предпочтительнее всего CGI практически во всех аспектах.

На самом деле это просто эффективная вещь. CGI порождает целый новый процесс для каждого запроса, который достаточно тяжелый для того, что он делает.

PHP также можно запускать через CGI, но mod_php внедряет интерпретатор в apache. Есть mod_python, который выполняет ту же работу, и mod_wsgi, как говорит Юваль.

В документации Python есть страница, которая описывает преимущества и недостатки различных возможностей .

mod_python

(…) Вот почему mod_python следует избегать при написании новых программ.

WSGI

Интерфейс шлюза веб-сервера или WSGI для краткости в настоящее время является лучшим способом для веб-программирования Python. Хотя это здорово для программистов, пишущих рамки, нормальному человеку не нужно напрямую вступать в контакт с ним.

FastCGI и прочее

В наши дни FastCGI никогда не используется напрямую.

Помимо предложений, сделанных другими, вы должны действительно рассмотреть возможность использования какой-либо структуры. Вы можете и должны использовать FastCGI , mod_python или mod_wsgi, но на самом деле они не предназначены для написания кода напрямую. Могу я предложить одно из следующего?

  • django (мой любимый для практических приложений)
  • пилоны
  • cherrypy (мой любимый для не-практических приложений)
  • web.py