Tark
@Tark
Pyramid'альный мир

Что можно сделать на Tornado?

Здравствуйте, уважаемые люди сообщества!

Я умею и могу в Pyramid и Flask. С некоторых пор захотелось изучить что-нибудь новое и я решил узнать про фреймворк Tornado.

Интересует вопрос: для каких задач лучше всего подойдёт именно он? Чаще всего вижу примеры задач, где с помощью Tornado пишут чат на веб-сокетах... но ведь этот фреймворк используется не только для написания чатов, правда? Правда же? Говорят, писать веб-приложения с использованием шаблонизаторов - то есть "обычные сайты" - на Торнадо расточительно: он может и умеет, но это лучше сделать на других фреймворках, которые лучше предназначены именно для этих целей, таких как Pyramid, Flask. Django etc. А есть ли задачи, глядя на которые тим-лид скажет, что вот тут лучше всего подойдёт именно Tornado?

Или, что ещё лучше, может быть у вас завалялись тестовые задачи при устройстве на работу, где пишут сервисы на Tornado и которые вам не жалко открыть? Буду благодарен за любые задания!
  • Вопрос задан
  • 23448 просмотров
Решения вопроса 3
bobrovskyserg
@bobrovskyserg
Посмотрите вот это, прежде чем хвататься за Торнадо.
Ответ написан
mututunus
@mututunus
Backend developer (Python, Golang)
На tornado можно сделать все что угодно, вопрос в целесообразности. Но больше всего он подходит для задач с большим количеством http-запросов. Напишите например агрегатор ленты нескольких соц. сетей и/или rss.
Ответ написан
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Для чего я использую tornado, точнее cyclone.io, порт tornado под twisted.

- для системы miidleware ТВ-приставок. Приставка лезет за страничкой к серверу, а в остальное время общается с ним по json/REST/comet. Админка статистики этого дела работает на отдельном порту и содержит 10 страниц + json/comet/rest.
- для системы доступа к кластеру с тонких клиентов, сервер отдает данные в json о доступных точках входа на сервера кластера и запоминает выбор пользователя. Всего 30 строк кода, Карл :-) С одной стороны сервер подключается в influxdb, с другой отдает данные пользователям.
- для админок к разным устройствам
- для вещей, когда просто нужен вебсервер и шаблоны, и не нужна база данных, ORM, и куча лишнего говна.
- для вещей, когда web-интерфейс как небольшая часть остального функционала
- для web, когда нужно быстро туда-сюда прогнать данные.

Если посмотреть на отличия с django, то django умеют делать отличный фреймворк для web, а торнадо - отличный фреймворк для http!

Дополнил
А чего далеко ходить. Простая конфигурилка для линукса, интерфейсы, логин/пароль, просмотр и конфигурилка запущенных служб. Раньше я это делал на webmin, теперь cyclon + angularjs.

А вот.. вот делаю дизайн html для битрикс (уж простите...). Как-то нужно смотреть html/css + картинки + javascript, причем, все с путями реального сайта - 10 минут и у меня всё готово. Ну не апач с nginx для этого разворачивать же?

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

В общем везде, где просто нужен быстрый и простой web-сервер с моторчиком из питона. Раньше я для этого использовал jetty (java) с моторчиком на яве соответственно. На питоне это проще в два/три раза только из-за того, что можно по ssh зайти и тупо поправить в коде без компиляции (maven) и среды разработки (eclipse).
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
Tark
@Tark Автор вопроса
Pyramid'альный мир
Посмотрел на aiohttp, осталось странное такое впечатление.

Начнём с того, что асинхронный aiohttp в 2-5 раз медленнее синхронных топов на самой простой задаче - вернуть JSON. Окей, в реальной жизни засчёт однопоточности и ненужности кеш-серверов скорость сгладится.

Второе. Андрей Светлов говорил: "смотрите, у нас есть джынжа со с макой! Можно уже писать приложения!". Да.
aiohttp_jinja2 не проверяет в декораторе значение, которое ей передаётся. Вернули не словарь? Нате пятихатку!
Почему бы не проверять? Почему в шаблон не передаётся request по умолчанию, почему мне нужно будет вписывать его самостоятельно? Если бы мне хотелось многословия, я бы Django использовал.

Третье, про aiohttp.web. В pyramid, к примеру, есть чёткое разделение между роутом и вью-функцией, где роут - это URL с именем, а во вьюшке можно определить обработчик роута в зависимости от HTTP-метода и прочего. В результате можно строить URL в шаблоне, указывая имя роута и необходимые параметры; очень удобно. В отличие от pyramid, в aiohttp есть понятие роута, где сразу же указывается HTTP-метод, URL и обработчик. Что самое злое, метод тут - ТОЛЬКО СТРОКА. Не список/множество возможных методов типа method=('GET', 'POST'), а только строка. В результате необходимо придумывать разные name для роута для одного и того же URL, что добавляет неудобства для их построения. И чёртово отсутствие request в шаблоне, чёрт бы его подрал. Ну не хочу я вертать взад dict(request=request, user='Tark'), я хочу без реквеста, но чтобы оно в шаблон передавалось самим aiohttp. Аргх!

Что понравилось - aioauth-client. Ужасное название пакета, но какая прелесть внтурях. Осталось чуток дописать, чтобы не приходилось делать if 'twitter' elif 'github' elif 'google', добавить роутов и можно получить нормально работающий python-social-auth-light.

Но пока что всё это слишком не доработанное. Разработка идёт гигантскими шагами, но результат пока ещё использовать тяжело.
Ответ написан
Комментировать
Мне кажется, какие-нибудь шашки или шахматы сетевые будут неплохим вариантом. Ну, и присоединюсь к замечанию про asyncio.
Ответ написан
Комментировать
lightarhont
@lightarhont
python/php developer
Прежде всего для работы с websocket. Хотя как писали раньше, мелкие запросы он пропускает лучше чем pyramid. Вообще так как я использую pyramid так-же и он мне нравится, то его очень хорошо дополнять tornado для быстрого асинхронного сервера. Вот только вопрос лучше ли Торнадо работает с ORM?
Ответ написан
Комментировать
unclechu
@unclechu
Как-то писали «обычный сайт», в общем-то если собрать однажды гибкие и расширяемые «рельсы», то вполне можно делать и обычные сайты в том числе. В приведённом примере собрана достаточно гибкая и расширяемая админ-панель, можно юзать на условиях GNU/AGPL. Правда в качестве ORM для БД я бы порекомендовал взять что-нибудь аля монгус, т.к. в данном проекте главная боль в заднице — это были миграции для SQLAlchemy.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы