Что делать, если ваш код на Python тормозит / Григорий Бакунов (Яндекс)

  Рет қаралды 62,721

Python Channel

Python Channel

Күн бұрын

Пікірлер: 104
@NickMukhin
@NickMukhin 3 жыл бұрын
Что делать? Переписать его на С.
@mirko_lon
@mirko_lon 3 жыл бұрын
Лучше на Rust или C#.
@joech1065
@joech1065 3 жыл бұрын
Зачем писать на C когда есть Rust?
@anchovy2056
@anchovy2056 3 жыл бұрын
@@joech1065 старый друг лучше новых двух :)
@NickMukhin
@NickMukhin 3 жыл бұрын
@@joech1065 Затем, что C - самая зрелая технология. Отлито в бронзе.
@joech1065
@joech1065 3 жыл бұрын
@@NickMukhin Лично мое мнение что только системы типов дают какие-то гарантии. C язык зрелый в плане того что за десятиления уже хорошо известны его риски и что любой сложный софт, который пишется на нем несколькими людьми, будет иметь существенные риски как безопасности и корректности, так и продуктивности и поддержания и легкости обновления. Тут много деталей, но чтобы разобрать только один пункт - безопасность - то 70% всех багов безопасности это баги памяти (на софте который в основном написан на c или c++), которых просто банально бы не было бы в языке где система типов просто не дает совершить эти баги. И это не от неопытности, а от невозможности человеческому уму вообще думать на таком уровне, где можно понять что точно в софте, который пишут несколько людей, нет таких багов. Это уже выучено от openssh до linux, где включены одни из наиболее опытных программистов, и где код на который смотрит весь мир, и все равно постоянно там находятся катастрофические баги такого типа, которые абсолютно предотвратимы. Более того мы даже не знаем всех этих багов, так как как мы убедились по Pegasus, когда хакерам платят миллионы чтобы их находить, то они находят их везде при желании и об этом не говорят, в том числе в софте который специально сделан для безопасности: браузерах и операционных системах. Им не составило особого труда делать коммерческий продукт который позволяет взламывать кого угодно, работает на разных операционных системах и проникает через разные браузеры/приложения, и получает полный root контроль устройства, так как они не только находить как минимум один такой баг в приложении через которое они проникают, но и в коде операционной системы, которая пытается сдерживать это приложение. Единственные гарантии которые могут быть в софте это формальные гарантии, которые либо есть (есть математическое их доказательство), либо их нет. Если эти гарантии есть, то любой код, по определению, написаный в системе которая дает эти гарантии будет иметь эти гарантии и для этого не нужно 30 лет использования, чтобы сказать что какой-то код “стабилен”. Этот код будет по определению стабилен в плане предоставления каких-то гарантий. И наоборот, 50 лет использования какой-то технологии не придадут этой технологии никаких гарантий, которых в ней никогда не было. После Pegasus нужно было всем программистам просто собратся и признать что без какой-то системы типа которая автоматически им не позволяет писать код где это возможно или каких-то формальных гарантий, никакие люди в мире, никакой проэкт не способен не допускать эти баги в коде над которым работают несколько людей. И то что на данный момент, в 2021, NGO Group все еще продает Pegasus, находя все новые баги в самом безопасном коде на который смотрят больше всего людей, и они все также успешно полностью взламывают разные операционные системы от Android до iOS, это последний гвоздь в гроб идеи стабильности без системы типов, которая дает какие-то конкретные гарантии какой-то конкретной стабильности (например, от багов памяти или гонок данных).
@ihateregistrating3494
@ihateregistrating3494 Жыл бұрын
Отличный доклад, очень харизматичный человек
@Bisirsky
@Bisirsky 3 жыл бұрын
Почти как стендап :)
@ivanaaa6049
@ivanaaa6049 3 жыл бұрын
PyPy требует "рассовой чистоты", т.е. если хоть один импортируемый модуль написан на С (например, NumPy, Pandas), то он вываливается с ошибкой на строчке импорта. А с Cython нужно долго разбираться, чтобы хоть что- то написать.
@BloodJazMan
@BloodJazMan 5 жыл бұрын
Спасибо докладчику за мнение про nim ;) очень схоже с моими мыслями
@denissavran7322
@denissavran7322 5 жыл бұрын
Хардкорный рефакторинг без каких-либо библиотек: RESPONDENT_KEY = "@respondent@" def send_notification(respondents: list, message: dict) -> None: to_send = copy(message) to_send.setdefault("from", None) no_subject = "subject" not in to_send respondent_key_count = to_send["body"].count(RESPONDENT_KEY) respondent_crc = crc_code(RESPONDENT_KEY) * respondent_key_count body_crc = crc_code(to_send["body"]) body_crc_without_respondent_crc = body_crc - respondent_crc for resp in respondents: if no_subject: to_send["subject"] = "Hello, " + str(resp) to_send["body"] = message["body"].replace(RESPONDENT_KEY, resp) resp_crc = crc_code(resp) * respondent_key_count to_send["crc"] = body_crc_without_respondent_crc + resp_crc Для 10 000 получателей с длиной email-а от 20 до 29 символов и письма с телом из 5024 символов получил следующие результаты: 2.63 s ± 9.99 ms per loop (mean ± std. dev. of 10 runs, 1 loop each) - старая 29.5 ms ± 310 µs per loop (mean ± std. dev. of 10 runs, 1 loop each) - новая gist.github.com/blaxpy/3d774566bf67563ee3238fb5fd720a75
@RusShbreak1
@RusShbreak1 Жыл бұрын
Т.е. в 80 раз?
@ion1162
@ion1162 5 жыл бұрын
Все бы хорошо, только в crc_code берется ord от unicode символа, а в crc_code2 ord от бинарного представления, что даст разные результаты.
@phyllobolus
@phyllobolus 4 жыл бұрын
Кстати, докладчик не попробовал суммировать utf-8 в pypy. Чтобы в байтовую строку перевести, cython не нужен.
@АлександрИванов-ъ7р6ч
@АлександрИванов-ъ7р6ч 2 жыл бұрын
Интересный доклад. Спасибо
@anatolyalekseev101
@anatolyalekseev101 2 жыл бұрын
Суммаризируем: не было проведено начальное профилирование - время программиста тратилось на оптимизацию неоптимально; не были созданы тесты (на представительной выборке), обеспечивающие проверку равенства выходов процедуры до и после оптимизации, из-за чего в продакшене, видимо, все клиенты кроме первого получили сообщение с чужим именем; не было замечено, что использованная реализация crc аддитивна по отношению к имени клиента (при одном и том же основном сообщении), следовательно может быть существенно ускорена кэшированием crc базового сообщения, а в цикле можно было вычислять лишь crc имени клиента (и то закэшировать) и плюсовать с crc основного; не была применена многопроцессорность.
@mishuha
@mishuha Жыл бұрын
Я такой же программист, пишу код 3 часа в год. Но когда услышал что есть времязависимые модули, у меня пригорело. Семафоры, флаги и пайпы для кого?
@python_interview
@python_interview 3 жыл бұрын
Отличный доклад, узнал много нового, спасибо!
@maelstrom254
@maelstrom254 3 жыл бұрын
Чего только не придумают что бы не писать на C++
@joech1065
@joech1065 3 жыл бұрын
Ну как бы могли и на Rust написать. Там и абстракции есть и скорость, и не нужно переживать за память и баги как в c++. Я думаю следующее поколение языков за borrow checker'ом в одной форме или в другой, так как это как раз таки позволяет писать быстрые программы на высоком уровне абстракции. Многие боятся c++ и borrow checker как раз таки им позволяет писать такие (быстрые) программы без страха или опыта работы с памятью, так как их ошибки поймает система типов.
@ЗеновичНикита
@ЗеновичНикита 3 жыл бұрын
@@joech1065 а зачем в с++ переживать за память в данных примерах?
@vdarasun
@vdarasun 2 жыл бұрын
@@ЗеновичНикита , сразу вспомнил пример докладчика про 14 строк кода на С в ядре Linux. :)
@knowledgedose1956
@knowledgedose1956 2 жыл бұрын
что бы такое написать чтобы показаться умным, да автор?
@НикН-о7о
@НикН-о7о 5 ай бұрын
Использовать go!
@maratimus
@maratimus 4 жыл бұрын
Спасибо, бро.
@mexey
@mexey 3 жыл бұрын
Жаль нет бенчмарка с использованием чистого С кода скомпилированного в библиотеку, я думаю тоже получилось бы неплохо и не пришлось бы менять интерпретатор # c code unsigned int checksum(char* buf) { unsigned long idx; unsigned int out; unsigned long bufLen = strlen(buf); for(idx = 0L, out = 0; idx < bufLen; out += (unsigned int)buf[idx++]); return out; } # python code import ctypes clib = ctypes.CDLL('clib.so') checksum = clib.checksum(input_string)
@gvozdyara9563
@gvozdyara9563 Жыл бұрын
Просадка по скорости при переводе типов python => C и обратно
@stanislavsheev7748
@stanislavsheev7748 3 жыл бұрын
Пишу свои модули на С. А если еще помнить, что есть HyperTreding, можно в рамках одного процесса получить ускорение.
@Drak0sha13
@Drak0sha13 3 жыл бұрын
Где-то я слышал про грааль, что его надо было откапывать.
@qunki9533
@qunki9533 3 жыл бұрын
Надо написать тоже самое на С XD
@ehlopenko
@ehlopenko Ай бұрын
посмотрел на х2
@oriontvv
@oriontvv 3 жыл бұрын
профайлинг, C ABI + Rust для узких мест (PyO3)
@alexandermaretskiy3984
@alexandermaretskiy3984 3 жыл бұрын
вынос copy(message) за пределы цикла даст модификацию message при первом проходе в цикле и тогда последующие проходы уже заменять @respondent@ не будут, то есть все получатели получат сообщение адресованное одному из них
@anatolyalekseev101
@anatolyalekseev101 2 жыл бұрын
А ведь это полный провал, Карл...
@СергейПресняков-о4р
@СергейПресняков-о4р 5 жыл бұрын
Программировать 3 часа в день Говорить, что есть не очень много времени на программирование ????? А сколько тогда надо? Чтобы даже во сне кодить?
@yaruzki7022
@yaruzki7022 3 жыл бұрын
10
@Woodreack
@Woodreack 2 жыл бұрын
@@yaruzki7022 аватарка подходящая
@nakidai
@nakidai 2 жыл бұрын
Ты спишь 21 час в сутки?
@ГеннадийАлейников-с4н
@ГеннадийАлейников-с4н 2 жыл бұрын
Чзх?! Славой Жижек выучил Python?
@fun_dev
@fun_dev 3 жыл бұрын
почему бы не посчитать отдельну "crc" для сообщения без респондента, а потом приплюсовывать к ней в цикле "crc" ТОЛЬКО респондента? будет то же самое, только считать меньше.
@theALFEST
@theALFEST 3 жыл бұрын
Зачем вообще считать сумму символов? Может проще использовать __hash__() строки, или в python хеш строки вычисляется лениво?
@fun_dev
@fun_dev 3 жыл бұрын
@@theALFEST я не знаю что там в питоне, просто предложил оптимизацию существующего алгоритма
@anatolyalekseev101
@anatolyalekseev101 2 жыл бұрын
тоже об этом подумал )
@Алексей-р2л9д
@Алексей-р2л9д 4 жыл бұрын
Переписать на net, java, что тут еще остается)
@ЗакировМарат-в5щ
@ЗакировМарат-в5щ 3 жыл бұрын
Да пишите всё на плюсах, а лучше прямо на ассемблере дополненным классами и ромбовидным виртуальным наследованием, зачем заморачиваться?
@melnikovivan85
@melnikovivan85 5 жыл бұрын
Отличное выступление. Интересно, какие основные рабочие обязанности докладчика?
@phyllobolus
@phyllobolus 4 жыл бұрын
Говорить ртом, какой Яндекс замечательный.
@phyllobolus
@phyllobolus 3 жыл бұрын
@DaXz чиво, бля?
@phyllobolus
@phyllobolus 3 жыл бұрын
@DaXz перечитай, что ты понаписал, борзописец ты наш.
@Пятеркаа
@Пятеркаа 2 жыл бұрын
Выступать перед публикой
@NSRomanov
@NSRomanov 3 жыл бұрын
Если код на Python тормозит, значит не надо было писать его на Python)
@berkut1011
@berkut1011 3 жыл бұрын
Если код на Python тормозит, значит код уже написан на Python. Или предлагаете вернуться на машине времени в прошлое и выбрать другой язык? )
@steps-in-forest
@steps-in-forest 3 жыл бұрын
Человек предлагает не связывать свою жизнь с ущербным инструментом
@artemTHISNAMEALREADYTAKEN
@artemTHISNAMEALREADYTAKEN 3 жыл бұрын
@@steps-in-forest Что ты имеешь в виду?
@demoonk420
@demoonk420 2 жыл бұрын
Любой сложный проект на С превращается, со временем, в плохооптимизированный, неспецифичный интерпретатор Python.
@hajvklkaj6462
@hajvklkaj6462 2 жыл бұрын
@@demoonk420 прям как linux, да?
@takethecompressor2239
@takethecompressor2239 3 жыл бұрын
Писать на ассемблере.
@anysym648
@anysym648 4 жыл бұрын
намба эффективный при правильном его использовании, у вас же как-то криво он пошел (почтитайте документацию к намба). обычно python + numba показывает результат в 1600% по скорости от того же C++ при правильном его использовании. откуда цифры такие? а вы попробуйте сами.
@backer01
@backer01 3 жыл бұрын
Да, numba очень неплох на самом деле, я его использовал для ускорения игр (простенькие, конечно)
@NSRomanov
@NSRomanov 3 жыл бұрын
1600% от С++? В 16 раз быстрее С++?! Серьёзно?! Ты что курил? Если писать код грамотно, то ничего быстрее С/С++ быть в принципе не может (asm не в счёт).
@aralsea_
@aralsea_ 3 жыл бұрын
18:54, дальше смотреть не стал, после слов об убранной строчке на заведении ссылки на ссылку.
@knowledgedose1956
@knowledgedose1956 2 жыл бұрын
почему же?
@irinamilaya
@irinamilaya 3 жыл бұрын
Здравствуйте, нужно доделать сайт на питоне, сколько по цене
@hack_1ess
@hack_1ess 3 жыл бұрын
Смотря какой сайт
@irinamilaya
@irinamilaya 3 жыл бұрын
@@hack_1ess как можно с вами связаться
@hack_1ess
@hack_1ess 3 жыл бұрын
@@irinamilaya мой телеграмм @PyCoder1
@thomasshadows2797
@thomasshadows2797 3 жыл бұрын
смешно смотреть доклады от разработчиков Яндекса по ускорению кода, когда приложения от Яндекса одно за другим тормозит как не в себя... И это на среднем уровне устройства от 25к...А что творится на бюджетных моделях, даже представить сложно
@Русь-Родина
@Русь-Родина 3 жыл бұрын
Надо сняться с ручника и перейти на другой язык программирования. Все просто.
@demoonk420
@demoonk420 2 жыл бұрын
дорого, долго и плохой саппорт.
@pasza
@pasza 5 жыл бұрын
"купи козу" от программирования: 1. придумать язык который тормознее в 100+ раз чем соотв. машинный код 2. начать страдать 3. придумать хак который "ускоряет" всё обратно (не всё, а частично) 4. что называется, профит P.S. на питоне пишу, но ситуация от этого менее анекдотичной не становится P.P.S. доклад интересный, спасибо Григорию
@elfthecrazy
@elfthecrazy 4 жыл бұрын
Вам кто-то мешает писать сразу на машинном коде? Ну, если ваша цель не быстрая и понятная разработка, а только скорость исполнения кода ))
@ИванИванов-н9т9ъ
@ИванИванов-н9т9ъ 3 жыл бұрын
@@elfthecrazy Да, действительно, зачем использовать медленный Python, когда можно писать на чистом машинном коде. Можете, например, написать программку на одном и другом языке, скачивающую страничку с сайта, и легко убедиться, что на машинном языке все работает гораздо быстрее;-)
@skelesheit
@skelesheit 3 жыл бұрын
Анекдот: почему ваш Python код тормозит? Потому что вы пишите код на Python.
@AndreasKobzar
@AndreasKobzar 2 жыл бұрын
пишЕте
@wxSoftThePointOfU
@wxSoftThePointOfU 5 жыл бұрын
АхаХа, переходить на Go конечно же
@theALFEST
@theALFEST 3 жыл бұрын
Вместо того, чтобы написать нормальную функцию хеширования строки или использовать существующую - эксперименты с другими языками.
@insar21
@insar21 3 жыл бұрын
1. Смириться. 2. Переписать на нормальном языке.
@megargan
@megargan 2 жыл бұрын
Если на питоне ваш код тормозит, следует не писать код на питоне) Все просто
@jivoievchik4480
@jivoievchik4480 3 жыл бұрын
Что делать если у вас не то что тормозит какой-то там код на питоне а вы никогда к этому небыли причастны а вам всякую хуиту в реки закидывает
@ВікторА-к2й
@ВікторА-к2й 2 жыл бұрын
Три точечки ---> Не интересно. Пользуйтесь.
@Rundik
@Rundik 3 жыл бұрын
Читал только заголовок, но предполагаю, что ответ - не писать на питоне
@platonelenin
@platonelenin 3 жыл бұрын
Выкинуть Питон и взять Джулию.
@dmitriimolchanov4971
@dmitriimolchanov4971 3 жыл бұрын
Переходить на нормальный язык)))
@devlab3249
@devlab3249 3 жыл бұрын
Уважаемые коллеги программисты, бегите, пожалуйста, подальше от Python, меняйте язык на любой другой. Заранее прошу прощение, если ниже сказанное кого-то оскорбит, но просто накипело, поймите, никого обидеть не хочу. Синтаксис ужас, сам язык медленный и с морально устаревшей идеологией, как и библиотеки написанные для него (имею ввиду в частности django). Писал разные проекты под разные платформы и назначения, занимаюсь разработкой уже 15 лет. Пишу на C, C++, C#, Java, PHP (Laravel), Ruby (RoR), JavaScript (Vue, React), Objective-C, Swift, и на Assembler немного (Также застал времена Pascal, Basic, Delphi). Ни в одном из перечисленных языков не встречал такого маразматичного подхода и синтаксиса как в Python.
@agentdaun5699
@agentdaun5699 3 жыл бұрын
Тебе по аватарке ~24 года. Большего даже писать не нужно
@ДмитрийУшаков-л6ж
@ДмитрийУшаков-л6ж 2 жыл бұрын
Ты хочешь сказать, что у PHP, например, синтаксис и подход лучше?
@ВікторА-к2й
@ВікторА-к2й 2 жыл бұрын
Лол
@moduletechsm-t500-px9jo
@moduletechsm-t500-px9jo 9 ай бұрын
Мне кажется маразматичный пост твой
@steps-in-forest
@steps-in-forest 3 жыл бұрын
Ответ прост. Не использовать Python
黑天使被操控了#short #angel #clown
00:40
Super Beauty team
Рет қаралды 61 МЛН
1% vs 100% #beatbox #tiktok
01:10
BeatboxJCOP
Рет қаралды 67 МЛН
It works #beatbox #tiktok
00:34
BeatboxJCOP
Рет қаралды 41 МЛН
Григорий Бакунов, Яндекс «О странностях и import'e»
38:33
Видео с мероприятий {speach!
Рет қаралды 15 М.
Исправьте СРОЧНО эти 12 ошибок в ваших Python проектах
23:41
黑天使被操控了#short #angel #clown
00:40
Super Beauty team
Рет қаралды 61 МЛН