Какой веб-фреймворк Python имеет беспроблемную разработку и развертывание? - PullRequest
2 голосов
/ 23 сентября 2011

Я написал веб-API в BaseHTTPServer.Он предназначен для использования только на локальном хосте.Он возвращает объекты JSON в операциях GET / POST.

http://localhost:8888/operation?param

и код похож на

def do_GET(self):
   if self.path=="operation":
       self.wfile.write("output")

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


И, как я уже сказал, я рассматриваю проблемы разработка и развертывание дляВыбор этого веб-фреймворка.

Разработка

В настоящее время веб-интерфейс состоит из 250 строк и имеет очень простые функции.Я ищу что-то подходящее для очистки обслуживания и развертывания.Я не хочу, чтобы MVC, ORM, шаблоны и другие возможности фреймворка мешали моей учебе.Шаблоны UrL, которые перенаправляют на соответствующий модуль, хороши.

Развертывание

Он должен развертываться на зрелом сервере с модулем WSGI с минимальной суетой.И такая установка имеет hot-deploy (если не сказать лучшего слова), установка нового приложения или обновление кода означает копирование файлов в корневой каталог www в файловой системе.


CherryPy и Flask кажутся интересными.Django и Web2Py кажутся слишком всеобъемлющими.

Ответы [ 3 ]

6 голосов
/ 23 сентября 2011

Рекомендуемый способ развертывания wsgi - это длительный процесс , либо встроенный, либо daeomonized, а не сценарий cgi.В любом случае, это будет немного отличаться от загрузки файлов, как в php, перезапуск сервера / процесса путем прикосновения к файлу конфигурации, как правило, наиболее близок к «горячему развертыванию» с помощью wsgi.

Само собой разумеется, что сама структура не накладывает никаких ограничений на развертывание, если она соответствует стандарту wsgi.Выберите в зависимости от ваших потребностей: apache + modwsgi, gunicorn, cherry.py, paste.Ни один из них не предлагает «горячее развертывание» (afaik), вам все равно нужно будет создать скрипт wsgi и перезагрузить процессы.Расположение файловой системы обычно не имеет значения, и это хорошо.Обычно вы тоже не получаете автозагрузку.Я знаю, что делают werkzeug и cherry.py, и werkzeug также предлагает некоторые действительно классные инструменты отладки.Обратите внимание, что сам tornado / werkzeug * предлагает опцию автоматической перезагрузки, но на самом деле рассматривается для разработки, а не для развертывания, и не совместим с модулем wsgi.

Но независимо от того, насколько болезненным или безболезненным является развертывание, рекомендуется использовать что-то вроде фабрики для автоматизации ваших развертываний, и настройка веб-сервера wsgi не так уж сложна.

Выбор самого фреймворка довольно сложен и зависит от того, на каком уровне вы хотите работать. Tornado, werkzeug - это популярные низкоуровневые фреймворки (но также включают инструменты более высокого уровня, и многие из них - фреймворки + веб-сервер).), но вы также можете напрямую работать с webob и просто подключать все, что вам нужно.

У вас есть микрофреймы, такие как колба или бутылка, затем легкие рамки, такие как web2.py, илиможет быть, пирамида (линии о том, насколько тяжелый каркас немного размыт).

Тогда у вас есть «полный стек» джанго, грок, турбогенератор и т. Д. А потом у вас есть zope, который был на диете, но все еще очень тяжелый.

Обратите внимание, что со всеми из них вы можете делать что угодно (зависит только от того, насколько сильно вы хотите их согнуть), и во многих случаях вы можете довольно легко менять компоненты.Я бы начал пробовать микрофреймы, такие как бутылка или, может быть, фляга (вам не нужно использовать ORM или шаблоны, но они легко доступны, как только вы это сделаете), но также взятьпосмотрите на webob .

* комментарий: добавлен werkzeug в лагерь с не совсем автоматической перезагрузкой.

0 голосов
/ 23 сентября 2011

Мне лично нравится и использую web.py все время. Это очень легкий, настраиваемый и совместимый с WSGI.

http://webpy.org

0 голосов
/ 23 сентября 2011

Для того, что вы описываете, идите с: Tornado Web Server

Это привет мир:

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

application = tornado.web.Application([
    (r"/", MainHandler),
])

if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

Он отлично масштабируется, и я думаю, что вам может потребоваться 10 минут, чтобы настроить его с помощью кода.

...