Pull to refresh

Comments 13

Почему же был, последний релиз в этом году) Насколько помню, мы использовали какую-то функциональность psycopg2, которая не была им поддержана + адаптеры для gevent очень редко обновлялись, поэтому мы отказались от его использования

Можете рассказать чуть подробнее, какого функционала вам не хватило в асинхронном ORM Django 5?

Настоящей асинхронности, а не усложненного тредпула

Как коллега уже верно подметил, по состоянию на Django 5.0 в ORM есть только псевдо-асинхронность. DSF предоставили нам интерфейсы и синтаксис для асинхронной работы - и это хорошо, это открывает дорогу к переписыванию ORM на асинхронный лад. Но на самом деле, все асинхронные методы представляю собой просто отправку синхронного в отдельный поток (пример). То есть потоков будет создано по количеству параллельных вызовов, что либо никак не повлияет на производительность, либо отразится на ней отрицательно.

Насколько я помню, i/o bound задачи норм масштабируются через потоки, согласен, что это не совсем асинхронность, в понимании asyncio, но тем не менее, это по-моему рабочее решение. Если не ошибаюсь работа с файлами в асинхронище реализована так же.

В этом видео можно посмотреть про сравнение производительности синхронного и асинхронного 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 мс.

Как только стал смотреть легальные сайты в обход ТСПУ, они стали грузиться моментально, от чего уже стал отвыкать за последние годы. Просто объективный научный факт.

Sign up to leave a comment.

Articles