Спасибо :) Здається, що вам просто подобається Tornado (виключаючи останній приклад, коли дійсно може стати в нагоді). Мені спало на думку можливе застосування торнадо для зберігання і обробки станів чогось типу гравців в онлайн-грі або, я не знаю, розташування таксистів і пасажирів для показу всього цього на сайті / додатку. Але чи варто тоді цілеспрямовано вивчати цей фреймворк або правда варто перейти на третій пітон і зреагувати в asyncio / aiohttp?
Tark. О. Якраз для цього (зберігання і обробка в іграх) дуже часто його використовують. Ну і звичайно мені подобається - 5 рядків коду і у вас готовий сервер з батарейкою, + 10 рядків коду і вже готове додаток!
На рахунок того, потрібен чи ні торнадо, він простий як дві копійки, за тиждень освоїте повністю. А на aiohttp я зараз і сам гляну. Про торнадо вже сказав, швидкість і простота рулить у нього.
Подивився на 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.
Але поки що все це занадто не допрацювали. Розробка йде гігантськими кроками, але результат поки ще використовувати важко.