Форум сайта python.su
Разрабатываю специальное приложение для компании на tornado уже 1.5 года, в начале приложение было маленькое и красивое - всем понравилось, после этого посыпались заказы на расширение и углубление. В настоящее время, приложение превратилось в “портал/платформу” - более 300 типов данных, более 10 приложений в этой платформе, расширение через плагины и хуки. При сохранении какого-нибудь объекта с ним могут поработать 5-15 плагинов (хуков).
Все работает шустро. Проблема вот в чем - это все асинхронное.
На данный момент бизнес логики 80%, и асинхронность тут мешает:
- Более сложный код, высокий порог входа, сложнее работать с ошибками.
- Неудобное использование try..catch, в итоге нет использования.
- Проблема использования синхронного кода.
- Сложнее отлаживать.
В итоге программисты тяжело “входят” в проект, он их “пугает” и медленно развивается.
Плюсы которые дает асинхронность не перекрывает минусы.
Сейчас задумываюсь о миграции (что не быстрое дело) на мульти-потоковый фреймворк, либо попробовать вынести бизнес логику отдельно, а tornado оставить “мордой”, но пока особых плюсов в этом не вижу.
В итоге если перейду на другой фреймворк, для торнадо останется только какие-то узкие вещи типа чата, работа с web-сокетами и т.п.
Если у кого есть комментарии или советы - прошу…
Офлайн
Трудно что-то конкретное писать, не зная деталей.
Первая мысль после фразы “пугает”: нет документации или она не понятна.
Хуки и плагины как сделаны: спагетти колбэков, очередь, …?
Что именно пугает разработчиков?
Отладка - это да. Но к отладке через лог-файлы можно привыкнуть. Это не самый худший момент в истории. Тем более, что для большой системы уже имеет смысл задействовать CI и перенести акцент с отладки на контроль результата выполнения кода (в том числе, анализ результатов в лог-файлах).
Автоматизировав эту часть, вы решите проблему сложности поддержки кода, исправления ошибок и отладки. То, что так не любят делать разработчики - рутину. А значит, сделаете проект привлекательнее для них.
Можно рассмотреть вариант использования Twisted с Торнадо.
try-catch не самая нужная штука в принципе, десятилетиями писали и без этого.
А в асинхронном подходе это вообще естественно - не использовать try-catch - синхронный по своей сути.
Скажу больше, жалобы на отсутствие try-catch понятны в принципе, но их не должно быть, если проект с асинхронностью. Это как жалобы водителя на отсутствие полного привода в формуле 1.
Офлайн
Lexander“ajail” проект, документации почти нет, та что есть не вся актуальна.
Первая мысль после фразы “пугает”: нет документации или она не понятна.
LexanderПлагины - питон-пакеты, которые лежат в папке plugins, подключаются/отключаются мышкой через web интерфейс.
Хуки и плагины как сделаны: спагетти колбэков, очередь, …?
Lexanderиспользуем что-то подобное, новый функционал уходит сразу в релиз, если какие-то изменения, то делаем версию изменяемого функционала, далее обе версии могут параллельно работать и происходит плавный переход на версию 2 без остановки работы.
имеет смысл задействовать CI
LexanderКакие плюсы можно получить?
Twisted с Торнадо
LexanderДумаю - сложность.
Что именно пугает разработчиков?
LexanderЕсли нет try-catch, то асинхронный код может оборваться в любом месте при ошибке, нужно все что может вызвать исключение оборачивать в try-catch, так же могут быть ошибки в коде - забыть вызвать калбек или вызвать его дважды.
try-catch
Офлайн
o7412369815963Описка прям по Фрейду: a jail вместо agile в контексте сложного проекта :)
“ajail” проект
o7412369815963После дополнительных ваших пояснений могу сказать, что не смотрите в эту сторону.
Какие плюсы можно получить?
o7412369815963Если я правильно понял, сложность системы в целом, а не самого кода.
Думаю - сложность.
Офлайн
И да, никто ведь не мешает использовать try-catch в синхронных частях запускаемого асинхронно кода.
Срабатывание таймаута в асинхронных частях проверяете?
Если да, то все ОК.
Статус всегда определен.
Офлайн
LexanderЯ так понял это для отлова обрыва асинхронной нити,
Срабатывание таймаута в асинхронных частях проверяете?Если да, то все ОК.Статус всегда определен.
Офлайн
Всегда пожалуйста.
Офлайн