Pull to refresh

Comments 30

Я думаю это лучше уточнить у ребят, которые делали бенчмарк.

Но если интересно мое мнение: то судя по статье они старались тестировать стабильные версии фреймворков, а Starlette еще не релизная. Но могу ошибаться
Спасибо за ссылку. Жаль пока нет поддержки HTTP2.
Какие он даст приемущества фреймворку?
В смысле фреймворку? Это дает преимущество людям которые его используют.
А не смогут люди воспользовать преимуществами http2 поставив проксирующий веб сервер? Оно и в плане горизонтального масштабирования получше.

Не нужно было использовать Gunicorn: в документации того же aiohttp написано, что с Gunicorn он работает медленнее.


По бенчмаркам без Gunicorn из первых ссылок в гугле Sanic выходит раза в полтора быстрее чем aiohttp

Кстати, судя по гитхабу, оно всё ещё и в Docker запускается. Я не специалист, но много начитался про тормознутую сеть в докере и осмелюсь предположить, что это тоже может значительно влиять на результаты
В общем, попробовал сам запустить aiohttp и sanic без gunicorn. У aiohttp ничего принципиально не изменилось, а вот sanic стал в полтора раза быстрее и в итоге в 1.3 раза быстрее чем aiohttp
Нет теста компилируемого фреймворка Falcon — статья бессмысленна.
Согласно их тестам и Django и Flask уделываются в десятки раз, а значит и ваш фаворит скорее всего прогнётся.

Что значит "компилируемого"? Там просто все файлы транслируются в C-экстеншены с помощью cython. "Ситонизация" обычного питоновского кода почти не прибавляет к производительности такого кода. А чисто ситоновского оптимизированного кода там нет. Поэтому они и пишут, что:


        print('\nNOTE: Cython not installed. '
              'Falcon will still work fine, but may run '
              'a bit slower.\n')

"a bit slower"

А по тестам Falcon команды прирост производительности в 1.5 раза.

Это и есть "a bit faster" :)
Если бы они переписали код на чистом cython (pyx/pxd), производительность могла бы увеличиться в десятки раз (это, строго говоря, верно для какого-то вычислительного кода на питоне, потому как в случае web-фреймворка всё конечно сложнее). Но именно ситонизация py-кода даёт очень незначительный прирост так как выполняется тупая трансляция в CPython API со всем динамизмом, тогда как код на cython уже статически строго типизирован.

Вы можете называть это хоть a little bit faster, это всего-лишь слова. А в реальности на выходе мы имеет веб-приложение обрабатывающее в 1.5 раза больше запросов и это офигенно.

Но ведь aiohttp не фреймворк для разработки сайтов (в отличии от Django). Мне сравнение больше напоминает подводную лодку против карьерного самосвала. Сравнить можно, но имеет ли оно смысл?

Великолепно разрабатываю на Tornado сайты. Вместе с Mako выходит очень удобно.
Ну а если вспомнить что сейчас все чаще нужен json то вообще сказка. (для API)
И в этом случае 1000 коннектов которые ждут ответа от БД или другого сервиса не убьют ваш сервер.

По моему тут опять сравнили мягкое с пушистым. Как можно сравнивать скорость работы по числу запросов в секунду, если сравнивается всего ДВА воркера для синхронных фреймворков с условно бесконечным числом «воркеров» для асинхронных?
В таком тесте корректнее сравнивать время на обработку одного запроса. По этому показателю в этом тесте победил Django.
А если хочется сравнить число запросов в секунду, то надо значительно увеличить число воркеров для синхронных фреймворков. И заодно собрать статистику как от числа воркеров зависит число запросов в секунду и объём потребляемой памяти.
условно бесконечным числом «воркеров» для асинхронных?

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

Docker
OSX
Так стоп, я правильно понимаю, что это всё ещё и в VirtualBox запускалось?
Почитал матчасть — ну или HyperKit, что, впрочем, не лучше
Bottle это по сути аналог Flask, и если ты хорошо знаешь питон и придерживаешься его дзена то используешь бутылку, если нет, то Flask.
А есть ли какие-то преимущества у Flask по сравнению с Bottle?
Quart тоже хорош? вроде его разработчик хвалился что он быстр!

Увидев результаты Торнадо я сразу понял что тут что то неладное и полез в код.
Короче вы какуето херню потестили.


  1. Вы не использовали asyncpg для Торнадо а использовали старую momoko которая работает поверх psycopg.
  2. НО самое главное вы не использовали uvloop вообще! Да даже больше вы не использовали async/await в Торнадо! Вы знаете что собственная реализация ioloop на базе yield и gen.coroutine является депрекейтед!? Вы должны были использовать async/await и asyncpg. В 6 Торнадо вообще не будет старого лупа только тот что в asyncio.
вы

Это перевод, если что. Предлагаю повторить всё это на английском в issues на гитхабе

UFO just landed and posted this here
Сейчас произвел аналогичный тест (исходники из этой статьи, но без базы), обнаружил что у саника логи не выключены, ну и результаты соответственно:

aiohttp: 5681 rps
aiohttp + uvloop: 7780 rps
sanic (default): 6362 rps
sanic (logs off): 20956 rps
Sign up to leave a comment.

Articles