Comments 13
gevent был прекрасен ..
Можете рассказать чуть подробнее, какого функционала вам не хватило в асинхронном ORM Django 5?
Настоящей асинхронности, а не усложненного тредпула
Как коллега уже верно подметил, по состоянию на Django 5.0 в ORM есть только псевдо-асинхронность. DSF предоставили нам интерфейсы и синтаксис для асинхронной работы - и это хорошо, это открывает дорогу к переписыванию ORM на асинхронный лад. Но на самом деле, все асинхронные методы представляю собой просто отправку синхронного в отдельный поток (пример). То есть потоков будет создано по количеству параллельных вызовов, что либо никак не повлияет на производительность, либо отразится на ней отрицательно.
В этом видео можно посмотреть про сравнение производительности синхронного и асинхронного django.
https://youtu.be/C-YaLyzD3gM
Просто перепишите критические части на C++ и не надо будет так извращаться. Надо четко представлять: НЕ ПОДХОДИТ питон для нагруженных приложений. Он слишком медленный. 5 мс реакции! Да 20 лет назад и то шустрее программы работали.
Проблема конкретно здесь не в том, что Python медленный, а в том, что у его потоков есть единая точка синхронизации - GIL. Современные веб-приложения - это на 99% IO-нагрузка, поэтому скорость самого языка не играет здесь ключевую роль.
Насчёт переписывания на другой язык в целом - это плохая идея для команды, которая не владеет этим самым языком :) переписать на С, С++, Go, Rust было бы допустимо, если бы эти языки хотя бы использовались в компании, но нашими соседями были только Java-разработчики. Переписать этот кусок кода на другой язык в данном контексте значило бы сделать его неподдерживаемым.
Тем не менее, даже если бы мы переписали часть своего приложения, то мы бы всё равно не смогли никак переписать используемые библиотеки - они бы также зависели от GIL.
А вообще, в приведённом примере же нет никаких извращений, используются только стандартные инструменты: threading, asyncio и всем известные интерфейсы.
Старая отмирающая школа - "просто перепишите на Х/с использованием У"
Проще не станет, но придётся решать проблемы другого рода (сейчас вы хотя бы утекающие указатели не ищите). asyncio хорошее решение. А захочется переписать - всегда есть Cython :)
За что очень не любят узких специалистов: шаг влево или вправо и он абсолютно беспомощен. Зато денег просит и эго имеет. При этом все самое ценное создается на стыке технологий.
C++ — сложный язык, толковых разработчиков найти в разы сложнее, времени на разработку и поддержку, отладку, будет уходить больше.
А в подавляющем большинстве случаев, компании важно быстрее выкатить хоть как-то работающую фичу, чем выкатить офигенно быстро работающую фичу, но спустя полгода.
Да и несмотря на медленность... Я работаю последние годы в проекте с очень серьёзными нагрузками, думаю, что подавляющее большинство с такими не сталкивалось. И питон тащит. Да, иногда за счёт увеличения затрат на железо. Иногда приходится долго сидеть и придумывать, как же оптимизировать узкое место.
Но то же железо, имеет огромное отличие от разработчиков: его можно просто пойти и купить. Разработчика просто не пойдёшь и не купишь, их мало, они вредные, и с виду плохой от хорошего ничем не отличается. Ещё собеседования отнимают просто уйму времени и нервов.
То есть, мы ожидали, что через условные 300 мс мы получим какой‑нибудь
ReadTimeout
, но получали его только через 400 или даже 500 мс.
Как только стал смотреть легальные сайты в обход ТСПУ, они стали грузиться моментально, от чего уже стал отвыкать за последние годы. Просто объективный научный факт.
1001-ый способ миграции на асинхронный Python