Comments 19
стабильно чуть быстрее, но ненамного - от 10 до 20%
настоящего параллелизма нет ни там ни там, ввиду GIL
Настоящий параллелизм есть и там и там. На вызовах сишного libpq GIL отпускается
Например в FastApi (Starlette) при подключении вебсокета у вас есть экземпляр подключения
Вот starlette. Где он, этот экземпляр? Я вижу только send и receive, о которых я писал
Автор. При собеседовании на уровень Junior требуется знать разницу между потоками и корутинами. Ты её не понимаешь.
Дело в том, что достоинства всей этой пляски с гринлетами - это совместимость с синхронным (блокирующим) кодом - которой у asyncio нет.
Отлично, нет текущего синхронного кода - wsgi не используем, всё просто.
Не знаю, всё же использовать Python для веба... Ну такое... Не для того он предназначен. Да, сделать на Django неспешную админку для внутреннего продукта вполне себе неплохая идея, но не более того. А для высокопроизводительного сервиса это всё равно, что пытаться дотюнить педальную машинку до использования на немецком автобане. И ни WSGI, ни асинхронность тут кардинально не помогут.
Казалось бы, есть успешный пример Node.JS, который смог. Но он смог в достаточно специфичном кейсе асинхронных веб серверов, главным образом благодаря удачному сочетанию для этого случая движка V8 и концепции планировщика Event Loop, реализованной через libuv. В этой связке асинхронность там была изначально, причём не простая, а фактически реализуемая для таких вещей как работа с сетью на очень низком системном уровне.
Python и его веб-фреймворки, с другой стороны, в силу своей супер универсальности не могут похвастаться ни супербыстрым интерпретатором (в котором должна быть реализована компиляция, чтобы добиться сравнимых с V8 результатов), ни низкоуровневым планировщиком для асинхронных вызовов.
Концептуально в мире Python ближе всего к Node что-то вроде uvloop. Но всё равно это полумеры.
Всё сказанное выше - ИМХО, лично давно не имел дел с веб-фреймворками на Python, может быть с тех пор там стало всё очень хорошо (но это не точно). При этом против самого по себе Python ничего не имею, в своих нишах - язык отличный.
может быть с тех пор там стало всё очень хорошо (но это не точно).
Нормально там всё. Штуковины вроде starlette вполне шустры, если делать поправку на медленность вычислений, что для проксирования запросов в БД и лёгкой логики не так важно. То есть для типового, умеренно нагруженного сервиса, этого более чем достаточно. А если уже мы упираемся в скорость python, то проще взять Go, а то и C++.
в силу своей супер универсальности
Не, мода на django-подобные монстры прошла.
На бечмарках конкретных задач зачастую проблемы в производительности заметны из-за конкретной реализации логики, архитектуры либы, а не языка.
а что лучше всего подходит для бэк в вебе по вашему мнению?
Асинхронность в питоне — это хайп, не стоит отказываться от блокирующего кода