Почему питон медленный язык
Перейти к содержимому

Почему питон медленный язык

  • автор:

AlexKorablev.ru

AlexKorablev.ru

Александр Кораблев о разработке ПО, ИТ-индустрии и Python.

Почему Python такой популярный, если он такой медленный?

Опубликовано 14 December 2015 в Python

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

Медленный, если сравнивать его с C/C++ или Java, или C#. Это факт. Python достаточно медленный скриптовый динамический язык программирования. Любая метрика покажет, что программа на C++ будет работать быстрее. Но есть у языков и другая не менее важная метрика: скорость разработки.

Вот тут динамические языки начинают выигрывать. Разрабатывать на Python, Ruby, JS быстрее, чем на Java. А скорость разработки — это прямая экономия для компании. Сегодня разработка продукта заканчивается только, если проект закрывают. В остальных случаях купить еще один инстанс у амазона дешевле, чем увеличить срок разработки какой-либо фичи на пару недель.

В добавок, высокая производительность — не самоцель. Программа должна решать задачу с приемлемой производительностью. Задач где производительность критичная не так много. И даже тогда правильный алгоритм влияет на скорость больше, чем выбор языка реализации.

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

Еще один плюс Python (теперь уже по сравнению «одноклассниками») — его простой и читаемый синтаксис. Я слышал много историй, когда ученые, далекие от программирования, предпочитали делать наброски вычислений на Python. Не из-за наличия SciPy/NumPy, а именно из-за того, что такую программу проще написать и объяснить коллегам. Программистам работающим в командах простой синтаксис то же в плюс.

Конечно «батарейки» важны. За это, пожалуй, любят питон ребята из Data Science. Наверняка, для статистических расчетов и анализа есть более интересные инструменты. Но данные для таких расчетов нужно еще извлечь и подготовить. А потом оказывается, что считать на Python так же удобно.


Возник вопрос? Мне всегда можно написать в Twitter: avkorablev

Понравилась статья? Поделись с друзьями!

Почему ИИ пишут на питоне, если он медленный? [закрыт]

Закрыт. На этот вопрос невозможно дать объективный ответ. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах.

Закрыт 5 месяцев назад .
Зачем это делают? Питон это довольно медленный язык

  • python
  • искусственный-интеллект

Отслеживать
25.7k 4 4 золотых знака 21 21 серебряный знак 36 36 бронзовых знаков
задан 12 окт 2023 в 8:32

ИИ обучается и выполняется не на питоне, это просто удобное высокоуровневое АПИ, а внутри там обычный C/C++ и код для видеокарт

12 окт 2023 в 8:36

Библиотеки машинного обучения используют Си, Фортран даже, и Си++. Обертка в виде Питона позволяет обеспечить удобство работы.

12 окт 2023 в 8:41

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

По поводу питона сказано:

Прежде всего, Python — язык с открытым исходным кодом. Это означает, что он доступен для любых модификаций, которые разработчики сочтут нужными. Этот язык программирования постоянно развивается, что упрощает его синтаксис и повышает его эффективность. Во-вторых, существует большое количество готовых к использованию библиотек, которые помогают ускорить написание кода. Например, TensorFlow широко применяется для машинного обучения и работы с наборами данных; scikit — для обучения моделей машинного обучения; PyTorch — для обработки речи и для компьютерного зрения. Это ощутимое преимущество, которое может помочь ускорить разработку и сэкономить ресурсы, поскольку позволяет применять готовые решения вместо их создания с нуля.

Почему Python не подойдет для масштабного проекта?

У каждого языка программирования есть плюсы и минусы. Python также имеет некоторые существенные ограничения. Вот причины, по которым Python — не лучший выбор для масштабных проектов.
1. Медленный. Python выполняется заметно медленнее, чем другие языки программирования, такие как Java, C++, PHP, Javascript, Swift и другие. При создании больших приложений с большим количеством строк кода это главная проблема для программистов.
2. Не подходит для разработки мобильных приложений. Несмотря на то, что Python — серверный язык, он не самый лучший для разработки приложений на Android и iOS.
3. Трудности в использовании других языков. Многие программисты не любят писать код на других языках программирования. Это связано с их восприятием того, что другие языки значительно труднее использовать. Возможно, они привыкли программировать на Python, самом удобном в мире языке программирования.
4. Высокое потребление памяти. Python не всегда является идеальным выбором для нагрузок, интенсивно использующих память.
5. Зависим от сторонних фреймворков и библиотек. В Python отсутствует ряд функций, предоставляемых другими современными языками программирования. Поэтому программистам приходится использовать ряд сторонних фреймворков и инструментов

757 открытий
21 комментарий
Написать комментарий.

python — это вообще что-то типо общеупотребимый фрейм, и забавно смотреть на гордецов с апломбом заявляющих я пайтон-программист )))))))) пайтон сделали для ученых, чтобы им свои научные задачи можно было решать, не обращаясь к программистам за долго, дорого и непонятно, ибо стыковка по разному настроенных менталов рождает кривые-косые неработающие решения.

Развернуть ветку

Вас почитать так только ассемблером и нужно пользоваться, чтобы быть программистом?

WIKI: Программи́ст — специалист, занимающийся программированием, то есть созданием компьютерных программ.

Паскаль, бейсик, алгол, R, C, go, python, javascript, asm и подобное нуждается в программисте. И неважно компилируемый или Интерпретируемый язык. Сложный или простой.

Если алгоритм написан человеком и исполняет свои задачи. Синтаксис простой и понятный для входа. Почему это должно быть стрёмно?

Развернуть ветку

не ассемблер, а С+ и прикладная математика — порог входа для моего, например, проекта.

не имела ввиду стрёмно, имела ввиду, что владение пайтоном не делает программистом. Ну как бы не просто так людей 5 лет в универе учат.

Я сама не программист, я менеджер при техническом директоре и проектное управление обеспечиваю. и вот с моего угла зрения есть условно 2 реакции на одну и ту же задачу: да, это можно сделать 3 способами, в каждом из способов вот такие особенности, недостатки и преимущества. и вторая — ооооооооой, ну не знаю, я подумаю и потом трехэтажный бессмысленный и беспощадный, неработающий код на 3 страницы. Как вы думаете, сколько языков программирования под капотом у первого и второго спеца? Программистский кругозор из одного пайтона не рождается.

Развернуть ветку

Программисты и не должны обеспечивать себе программистский кругозор. Это задача и круг обязанностей техдиров и тимлидов.

Развернуть ветку

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

Как объяснить тому, кто знает, что земля плоская, обратное? в каких китах, черепахах и на чем-там держится плоское представление рассказать о навигации для круглой земли?

Кругозор — это то, что люди получают в вузах и то, что отличает людей с вышкой от людей без вышки. Это принципиальный разлом — мифологическое бытовое сознание и технологическое научное. условно.

Как кодит бытовой «программист» без кругозора — натыкаю так и вот так, и вот так, вдруг/пока не заработает. Ну не так что ли? а потом приходит реальный, а не условный, разраб и пытается найти в портянках кода безумной мартышки какие-то концы смысла, чтобы можно было вырезать эту раковую опухоль с минимальным вредом для продукта и сделать адекватно задаче и читаемо для других.

Ну у нас на тестовых заданиях такие сочинения рассказывают, что это невозможно сделать или уходят на неделю тест выполнять и потом приносят портянки, хотя там решение в три строчки, но этого решения нет в интернетике ))))))))

Так что нет. Проф кругозор — это прямой критерий стоимости и найма программиста. Кое-как-кодеров в жопу.

Развернуть ветку

ну вот реально из практики — была задача сделать спичечного человечка на основе координат для суставов. один чел месяц это делал и запросил 100к, второй за 15 минут на собеседовании это сделал и не видел в этом сверх задачи, и сточки зрения зп если на постоянку, запросил в 4 раза меньше. оба третьекурсники, правда, разных специальностей. кого я найму? с кем я смогу дойти до нетривиального продукта?

Развернуть ветку

Эффективность сотрудников тоже распределяется по гауссу. Это значит умных и умелых всегда намного меньше остальных. Хотим мы этого или нет.

Если команда маленькая, естественно нужно брать опытного.
А если большая и там все будут опытные и крутые, никто не захочет поехавший интерфейс подправить. Такая мелоч будет демотивировать. Нужны всякие.

По моему мнению для любого сотрудника, в том числе и программиста важно упорство и вовлечённость. Знавал я случаи, когда умный и опытный в проекте был почти бесполезен.

Развернуть ветку

да, согласна, полностью

Развернуть ветку

Простите, конечно, но, прочитав ваши комментарии, у меня сложилось впечатление, что фашизм всё ещё процветает, но в некой другой форме – в форме, похожей на бюрократизм. Более того, в ваших комментариях виднеется сегрегация людей по «заветной» корочке на две группы: а) унтерменши без вышки и б) уберменши с вышкой (высший класс) – это противно.

«Кругозор — это то, что люди получают в вузах и то, что отличает людей с вышкой от людей без вышки. »

Во-первых, кругозор – это то, что есть у каждого, но у всех он отличается своим общим объёмом.
Во-вторых, вы видимо не в курсе о общем уровне преподавания в стране – судя по всему, вы не знаете как у нас обучают ВУЗы в разных уголках страны – для вас существуют только МГУ и ВШЭ.
В-третьих, неужели вы не согласитесь с тем, что человек, который усердно занимается самообразованием и практикой, не будет выше по кругозору и уровню знаний того, кто окончил от балды, к примеру, нефтяной университет?

На личном опыте – я знаю множество деб*лов, окончивших ВУЗ просто так, в то время как я знаю немало образованных и интересных людей с 9 или 11-классами образования, которые в свои годы зарабатывают очень даже неплохие деньги.

И, высказываясь настолько невежественно, лучше лишний раз задумайтесь – а не вызовете ли вы комплексы и сомнения у других людей. Не ударите ли по своему рейтингу.

Честно, будь вы обычным ноунеймом, я бы мог просто усмехнуться и пойти дальше, но все же меня удивило, что у вас прокаченный рейтинг с плюсом, а сами вы представляете себя, как CEO некой IT-компании, поэтому я решил высказаться, поскольку накипело…

Развернуть ветку

интеллектуальный фашизм или сегрегация — это максималистично, я не призываю никого убивать, и не говорю о том, что условный IQ врожденный, его нельзя развить, но да, это один из немногих ключевых факторов, который определяет место человека в иерархии. Интеллектуальная стратификация — это объективное свойство устройства общества и непременное условие для технологического развития. Юнит без глубокой отраслевой компетенции ничего не может породить.

интеллектуальная иерархия — это лучше, чем иерархия ресурсов, например, второй свойственно быть по праву рождения или близости к телу. первая за способности. обществу свойственно быть иерархичным, если вы не заметили. разрывы между уровнями иерархии есть, но они должны стать более четкими и очевидными, у врачей, например, это нормально. хотя ходят и много — и вот это ненормально ))))) вы ж не пойдете к самоучке делать операцию, так почему любая другая сфера должна быть проще? об этом в разных формах говорят многие социологи. Дэниэл Бэлл — автор «Грядущее постиндустриальное общество» — описал выдвинутый им тезис «кодификация знания» — страниц на 50 своей книги. кодификация знания — это признак, одна из ключевых черт постиндустриальной экономики и рынка труда. в том числе о том, что знание невозможно передать без долгого обучения в научной школе или прикладной мастерской. Таллиннская школа управления — Владимир Тарасов, автор «Самоучитель игры на мировой шахматной доске» Сергей Переслегин — говорят: в будущем будут математики и все остальные. И да, я за меритократию — за способных.

Как подтвердить способность (и социальную нормальность, как условие для того чтобы эту способность раскрыть и использовать во благо) — для этого и есть социальный договор про социальные институты, суть которых подтверждать способность претендента признанием и ачивками профессионального институционального сообщества. Ато самоназванных экспертов наплодилось, знаете ли )))) и задача саморазвивающихся — идти в эти институты, выполняя свою сторону общественного договора, и заставлять их работать и обновлять их, если это требуется. а не быть самоназванным и непризнанным.

нет, я отлично знаю что такое образование в РФ — я закончила дальневосточный политехнический, ныне ДВФУ, некоторые пары преподавали спецы высочайшего класса с международным признанием, а некоторые — со старческим маразмом или в состоянии алкогольного опьянения. но с этим ничего не делали, потому что другого препода нет.

но даже пьяный или в маразме препод из вышки лучше, чем никакого. и первая обязанность студента — добывать свои знания из того препода, который ему дан. Говорю как человек, который еще и студ самоуправлением занимался, как инструментом для контроля качества образования.

есть доказанная история про то, что имея все возможные учебники и тексты определенной школы, но не имея ни одного носителя этой научной школы — невозможно поднять компетенцию. как, грубо говоря, выучить язык носителя по книгам. Поэтому корпорации поднимают свои центры компетенций, банки знаний и систему наставничества по ключевому для себя стеку.

Саморазвитие — это прекрасно, но оно переоценено и необъективно. Стопятьсот сертификатов разрозненных образовательных центров, которые просто делают бабки на людях, которым обещают космические зарплаты. ничего не стоят. Потому что это разрозненные поверхностные знания и навыки на уровне натренированной мартышки, шаг влево шаг вправо от задачки с курса — и чел нихрена не может сделать в прикладной задаче, но просит зарплату 100+ тыс. Сколько лет образовательному центру, который выдал сертификатик? Как долго в этот образовательный центр еще будут нести деньги, пока спрос не изменится и основатели его не прикончат?

Большинство моих знакомых контор в IT людей после It-курсов отметают на этапе отбора резюме. А еще для ряда работ, например, в моей конторе мы используем книгу с ятями — репринт издания по определенному направлению математики от 18-какого-то года. До70% информации по нашим исследованиям в интернете нет, только в специализированной и редкой литературе, которую тоже надо добывать. Чел наученный по ютуб-курсам вообще может себе представить, что так бывает? Методолог из ютуб-школы, который до того, как пилить ютуб-курсы, пилил марафоны для инста торговок, может себе позволить столько сил, времени и денег тратить времени на работу с источниками?

Как оценить интеллектуальный потенциал группы людей с точки зрения компании или государства? Как его мониторить и управлять им? Интеллектуальная стратификация по ачивкам и трекшену. Замечать взаимосвязи между тем или иным видом ачивок и динамикой трекшена, тиражировать эту взаимосвязь. Вы это называете фашизмом?

Стоит ли винить Python в низкой производительности?

Признаюсь, что сейчас на работе я занимаюсь разработкой на Python, в связи с чем вы можете счесть мое мнение предвзятым. И все же мне хочется развенчать некоторую критику в отношении Python и прояснить, стоит ли опасаться проблем со скоростью при повседневном использовании этого языка для обработки, исследования и анализа данных.

Реально ли Python слишком медленный?

С моей точки зрения подобные вопросы стоит задавать в рамках определенного контекста или случая применения. Действительно ли Python медленнее справляется с вычислением чисел, чем компилируемые языки вроде C? Да, так и есть. Причем данный факт известен давно, и именно поэтому библиотеки Python, для которых важна скорость, например NumPy, внутренне задействуют C.

Но во всех ли случаях Python медленнее других языков, которые, к слову, сложнее осваивать и использовать. Если рассмотреть бенчмарки производительности многих библиотек Python, оптимизированных под решение конкретной задачи, то по сравнению с компилируемыми языками справляются они вполне достойно. К примеру, взгляните на тест производительности FastAPI: очевидно, что Go, будучи компилируемым языком, оказывается намного быстрее Python. И все же FastAPI превосходит некоторые из библиотек Go при сборке REST API:

Сноска: в приведенный список не включены C++ и Java, которые демонстрируют еще большую производительность.

Аналогичным образом при сравнении Dask (написана на Python) со Spark (написана на Scala) для конвейеров нейровизуализации, работающих с большими данными, авторы сделали такой вывод.

В целом результаты не показывают существенной разницы производительности между этими движками.

По сути, нужно просто поставить вопрос: “Какая именно скорость нас фактически интересует?”. Если вы выполняете задачу ETL, которая запускается всего раз в день, то вас может вообще не волновать, выполнится ли она за 20 или 200 секунд. В таком случае вы можете предпочесть сделать код простым для понимания, упаковывания и обслуживания с учетом того, что вычислительные ресурсы становятся все более доступными по отношению к дорогостоящему времени разработки.

Вам быстрый или практичный код?

С практической точки зрения есть множество вопросов, которые стоит задать при выборе языка программирования для повседневной работы.

Можно ли с его помощью уверенно решать несколько бизнес-задач?

Если вас интересует лишь скорость, тогда не используйте Python и точка. Есть куда более производительные альтернативы для всевозможных случаев применения. Основные преимущества Python лежат в его читаемости, простоте использования и широком спектре решаемых с его помощью задач. Этот язык можно задействовать в качестве связующего компонента для огромного множества различных систем, сервисов и случаев использования.

Легко ли будет найти достаточное число знакомых с ним сотрудников?

Поскольку Python прост в освоении и применении, количество его пользователей постоянно растет. Бизнес-пользователи, которые ранее работали с числами в Excel, теперь могут быстро освоить программирование на Pandas и стать самодостаточными, избавившись от необходимости постоянно полагаться на ИТ-структуру компании. Это, в свою очередь, снизит нагрузку на департаменты ИТ и аналитики. Помимо прочего, таким образом сокращается время разработки и вывода продукта на рынок.

Сегодня гораздо проще найти инженеров знакомых с Python и способных обслуживать Spark-приложение по обработке данных на этом языке, чем тех, кто мог бы проделать то же самое на Java или Scala. Множество организаций постепенно переходят к реализации различных задач с помощью Python, просто потому что гораздо проще найти сотрудников, “говорящих” на этом языке.

В противоположность этому мне известны компании, которые отчаянно нуждаются в Java или C#-разработчиках, которые бы обслуживали существующие приложения. Однако на освоение этих языков уходят годы, в связи с чем они выглядят менее привлекательными для начинающих программистов, которые потенциально могут заработать больше на должностях, где требуется знание менее сложных языков, таких как Go или Python.

Синергия между экспертами из разных областей

Если ваша компания использует Python, то велики шансы, что тот же язык смогут применять бизнес-пользователи, аналитики/инженеры данных, бэкенд и фронтенд-разработчики, инженеры DevOps и даже системные администраторы. Это ведет к эффекту синергии в проектах, где люди из разных областей могут работать сообща и задействовать одни и те же инструменты.

Каковы истинные слабые места в обработке данных?

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

Запись в реляционные базы данных

При ETL-обработке данных в конечном итоге требуется загружать их в некое централизованное хранилище. И хотя можно задействовать многопоточность Python для ускорения записи данных в реляционную БД, скорее всего это приведет к тому, что увеличение числа параллельных процессов записи превысит ЦПУ-возможности этой базы данных.

На деле я сталкивалась с этим однажды, когда применяла многопоточность для ускорения записи в БД RDS Aurora на AWS. Тогда я заметила, что использование ЦПУ для узла записи настолько возросло, что мне пришлось намеренно замедлить код уменьшением числа потоков, чтобы не нарушить работу экземпляра БД.

Это означает, что в Python есть механизмы для распараллеливания и ускорения многих операций, но реляционная база данных (ограниченная по числу ядер ЦПУ) имеет предел возможностей, который не удастся преодолеть за счет более скоростного языка программирования.

Совершение вызовов к внешним API

Работа с внешними REST API, из которых вам может потребоваться извлечь данные для аналитики, является еще одним примером, где сам по себе язык не оказывается слабым местом. Мы, конечно, можем ускорить извлечение данных, задействовав параллелизм, но иногда это будет напрасным, так как многие внешние API ограничивают количество запросов, которые можно совершать за определенный промежуток времени.

Таким образом, вы зачастую будете оказываться в ситуации, когда приходится намеренно замедлять скрипт, обеспечивая тем самым соответствие установленному для API максимальному числу запросов:

time.sleep(10)

Работа с большими данными

Из своего опыта работы с огромными датасетами могу сказать, что, независимо от используемого языка, загружать действительно “большие данные” в память ноутбука не получится. Для подобных случаев вам скорее понадобится применять фреймворки распределенной обработки, такие как Dask, Spark, Ray и т.д. Существует лимит на количество данных, которые можно обработать при использовании одного экземпляра сервера на ноутбуке.

Если вы хотите распределить фактическую обработку данных на кластер вычислительных узлов, возможно даже задействовав инстансы GPU, которые могут дополнительно ускорить вычисления, то в Python есть обширная экосистема фреймворков, которые эту задачу упростят.

  • Хотите ускорить вычисления при обработке данных, задействовав GPU? Используйте Pytorch, Tensorflow, Ray или Rapids (даже с SQL — BlazingSQL).
  • Хотите ускорить код Python для обработки больших данных? Используйте Spark (или Databricks), Dask либо Prefect (который внутренне абстрагируется от Dask).
  • Хотите ускорить обработку данных при аналитике? Используйте быстрые специализированные резидентные столбчатые базы данных, которые обеспечат высокую скорость обработки при простом использовании SQL-запросов.

Если же вам нужно оркестрировать и отслеживать обработку данных, происходящую в кластере вычислительных узлов, то есть несколько платформ управления рабочим потоком, написанных на Python, которые ускорят разработку и повысят обслуживаемость конвейеров обработки данных. В их число входят Apache Airflow, Perfect и Dagster.

Дополнительно отмечу, что многие, кто жалуются на Python, просто не задействуют все его возможности или применяют для решаемой задачи не самые подходящие структуры данных.

Обобщим. Если вы хотите быстро обрабатывать большие объемы данных, то вам скорее потребуется больше вычислительных ресурсов, чем более скоростной язык программирования. Причем существуют библиотеки Python, которые упрощают процесс распределения работы по сотням узлов.

Заключение

В этой статье мы ответили на вопрос “Действительно ли Python является слабым местом в текущем ландшафте обработки данных?”. Несмотря на то, что он реально медленнее многих компилируемых языков программирования, Python легок в использовании и очень разносторонен. Мы также отметили, что для многих практическая сторона языка берет верх над его производительностью.

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

  • Как установить несколько версий Python в WSL2 и управлять ими
  • Thonny — идеальная IDE для новичков Python
  • 4 пайтонические техники для краткого кода

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *