SlideShare a Scribd company logo
1 of 29
Download to read offline
Python и высокая нагрузка
Следует ли использовать python там, где нужна
              высокая нагрузка


    Александр Шигин, shigin@rambler-co.ru


                Rambler, 2009
Сильные стороны Python’а
     высокая скорость разработки,
     библиотеки на все случаи жизни,
     можно использовать чуть ли не все
     возможности OS,
     если что-то тормозит, из этого можно
     сделать модуль на C,
     метапрограммирование.
Сильные стороны Python’а
     высокая скорость разработки, но нам прежде
     всего нужна высокая скорость работы,
     библиотеки на все случаи жизни,
     можно использовать чуть ли не все
     возможности OS,
     если что-то тормозит, из этого можно
     сделать модуль на C,
     метапрограммирование.
Сильные стороны Python’а
     высокая скорость разработки, но адепты
     функциональных языков утверждают, что
     скорость разработки на функциональных
     языках выше,
     библиотеки на все случаи жизни,
     можно использовать чуть ли не все
     возможности OS,
     если что-то тормозит, из этого можно
     сделать модуль на C,
     метапрограммирование.
Слабые стороны Python’а
     отсутствие типизации,
     скорость работы,
     GIL.
Слабые стороны Python’а
     отсутствие типизации, да, есть юнит-тесты,
     но скорость работы они не восполнят,
     скорость работы,
     GIL.
Слабые стороны Python’а
     отсутствие типизации,
     скорость работы, python может (и часто
     обыгрывает) другие скриптовые языки, но
     компилируемые языки находятся в другой
     лиге
     GIL.
Слабые стороны Python’а
     отсутствие типизации,
     скорость работы,
     GIL, это не такая большая проблема, как
     многие думают, но это проблема.
А стоит ли?


  Почти все преимущества Python’а направлены на
  удобную и быструю разработку, а не на скорость
  работы.


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


  Global Interpretor Lock включается для работы
  ref-counter’а.
       его можно              отключать во внешних
       модулях, пока мы не работаем с
       python’овскими объектами;
Пару слов про GIL


  Global Interpretor Lock включается для работы
  ref-counter’а.
       его можно и нужно! отключать во внешних
       модулях, пока мы не работаем с
       python’овскими объектами;
Пару слов про GIL


  Global Interpretor Lock включается для работы
  ref-counter’а.
       его можно и нужно! отключать во внешних
       модулях, пока мы не работаем с
       python’овскими объектами;
       а для скорости во внешних модулях не надо
       работать с python’овскими объектами.
Чуть-чуть про объекты

  Объекты это такие специальные словари:
      при вызове метода каждый раз создается
      временный объект,
      даже если мы пишем C-модуль, он всё равно
      тормозит при доступе к полям объекта,
      в вырожденных случаях, использование
      вместо объекта tuple может ускорить
      программу в 2 раза,
Чуть-чуть про объекты

  Объекты это такие специальные словари:
      при вызове метода каждый раз создается
      временный объект,
      даже если мы пишем C-модуль, он всё равно
      тормозит при доступе к полям объекта,
      в вырожденных случаях, использование
      вместо объекта tuple может ускорить
      программу в 2 раза,
      словарь быстрее класса.
Чуть-чуть про объекты



  Не все так плохо:
      в 2.6 __slots__ дает прирост
      производительности,
              ;
Чуть-чуть про объекты



  Не все так плохо:
      в 2.6 __slots__ дает прирост
      производительности, но словарь все равно
      быстрее;
Чуть-чуть про объекты



  Не все так плохо:
      в 2.6 __slots__ дает прирост
      производительности, но словарь все равно
      быстрее;
      вы можете подумать про структуры на C...
Чуть-чуть про boxing/unboxing


  Например, мы решили использовать модуль array.
      мы здорово выиграли в памяти;
      но почти все наши обращения к массиву
      значительно медленнее, чем было до этого.
  Почему?
Чуть-чуть про boxing/unboxing


  Например, мы решили использовать модуль array.
      мы здорово выиграли в памяти;
      но почти все наши обращения к массиву
      значительно медленнее, чем было до этого.
  Каждое обращение к ячейке массива ведет к
  созданию нового объекта.
Запустим профайлер




  Кривые руки detected
Запустим профайлер


    обычно есть один тормоз,
                      ;
Запустим профайлер


    обычно есть один тормоз, который легко
    можно ускорить;
Запустим профайлер


    обычно есть один тормоз, который легко
    можно ускорить;
    но остальные тормоза размазаны ровным
    слоем по всей системе;
Запустим профайлер


    обычно есть один тормоз, который легко
    можно ускорить;
    но остальные тормоза размазаны ровным
    слоем по всей системе;
    я видел программу, которая 50% времени
    проводила в poll, но которую ускорили на
    треть.
Модуль на C


  Я считаю рассуждения про функцию, которая
  выполняется 80% времени мифом.
      не надо думать, что переписав одну функцию
      вы заставите остальное работать быстро;
      из-за python api вам придется переписывать
      не только функцию, что чаще всего
      вызывается, но и все функции, которые её
      вызывают.
Как результат...


     о производительности надо думать заранее;
Как результат...


     о производительности надо думать заранее;
     заранее представляя себе, что будет
     переписано на C;
Как результат...


     о производительности надо думать заранее;
     заранее представляя себе, что будет
     переписано на C;
     избегайте python api во внешних модулях;
     смотрите на Cython,
Как результат...


     о производительности надо думать заранее;
     заранее представляя себе, что будет
     переписано на C;
     избегайте python api во внешних модулях;
     смотрите на Cython,
     и внутрь numpy.

More Related Content

What's hot

ekbpy'2012 - Марк Коренберг - Системное программирование на Питоне
ekbpy'2012 - Марк Коренберг - Системное программирование на Питонеekbpy'2012 - Марк Коренберг - Системное программирование на Питоне
ekbpy'2012 - Марк Коренберг - Системное программирование на Питоне
it-people
 
Автоматизированные рефакторинги: AST, FST и все-все-все - Кирилл Борисов, Яндекс
Автоматизированные рефакторинги: AST, FST и все-все-все - Кирилл Борисов, ЯндексАвтоматизированные рефакторинги: AST, FST и все-все-все - Кирилл Борисов, Яндекс
Автоматизированные рефакторинги: AST, FST и все-все-все - Кирилл Борисов, Яндекс
it-people
 
50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant
50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant
50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant
it-people
 
Демонизированный PHP - before it was cool
Демонизированный PHP - before it was coolДемонизированный PHP - before it was cool
Демонизированный PHP - before it was cool
Andrey Tokarchuk
 

What's hot (20)

My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016
 
ETL на Python
ETL на PythonETL на Python
ETL на Python
 
ekbpy'2012 - Марк Коренберг - Системное программирование на Питоне
ekbpy'2012 - Марк Коренберг - Системное программирование на Питонеekbpy'2012 - Марк Коренберг - Системное программирование на Питоне
ekbpy'2012 - Марк Коренберг - Системное программирование на Питоне
 
Как ВКонтакте использует Go
Как ВКонтакте использует GoКак ВКонтакте использует Go
Как ВКонтакте использует Go
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
 
Ryazan
RyazanRyazan
Ryazan
 
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Автоматизированные рефакторинги: AST, FST и все-все-все - Кирилл Борисов, Яндекс
Автоматизированные рефакторинги: AST, FST и все-все-все - Кирилл Борисов, ЯндексАвтоматизированные рефакторинги: AST, FST и все-все-все - Кирилл Борисов, Яндекс
Автоматизированные рефакторинги: AST, FST и все-все-все - Кирилл Борисов, Яндекс
 
My talk on PgDay Russia 2014
My talk on PgDay Russia 2014My talk on PgDay Russia 2014
My talk on PgDay Russia 2014
 
неприятная правда про язык go
неприятная правда про язык goнеприятная правда про язык go
неприятная правда про язык go
 
Database First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДDatabase First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБД
 
50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant
50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant
50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant
 
My talk on Graphite stack on 58it.ru
My talk on Graphite stack on 58it.ruMy talk on Graphite stack on 58it.ru
My talk on Graphite stack on 58it.ru
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
 
Демонизированный PHP - before it was cool
Демонизированный PHP - before it was coolДемонизированный PHP - before it was cool
Демонизированный PHP - before it was cool
 
Применение языка Go в инфраструктурных проектах
Применение языка Go в инфраструктурных проектахПрименение языка Go в инфраструктурных проектах
Применение языка Go в инфраструктурных проектах
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
 
Автоматизированные рефакторинги: AST, FST и все-все-все
Автоматизированные рефакторинги: AST, FST и все-все-всеАвтоматизированные рефакторинги: AST, FST и все-все-все
Автоматизированные рефакторинги: AST, FST и все-все-все
 

Viewers also liked

Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Ontico
 
Gtd Dev Labs2010 Part Ii
Gtd Dev Labs2010 Part IiGtd Dev Labs2010 Part Ii
Gtd Dev Labs2010 Part Ii
Maxim Dorofeev
 
Gtd Dev Labs2010 Part I
Gtd Dev Labs2010 Part IGtd Dev Labs2010 Part I
Gtd Dev Labs2010 Part I
Maxim Dorofeev
 

Viewers also liked (12)

Python и его тормоза
Python и его тормозаPython и его тормоза
Python и его тормоза
 
Как использовать пакетные менеджеры для своего софта
Как использовать пакетные менеджеры для своего софтаКак использовать пакетные менеджеры для своего софта
Как использовать пакетные менеджеры для своего софта
 
Python и Cython
Python и CythonPython и Cython
Python и Cython
 
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
 
Big Data aggregation techniques
Big Data aggregation techniquesBig Data aggregation techniques
Big Data aggregation techniques
 
Gtd Dev Labs2010 Part Ii
Gtd Dev Labs2010 Part IiGtd Dev Labs2010 Part Ii
Gtd Dev Labs2010 Part Ii
 
Gtd Dev Labs2010 Part I
Gtd Dev Labs2010 Part IGtd Dev Labs2010 Part I
Gtd Dev Labs2010 Part I
 
PostgreSQL Vacuum: Nine Circles of Hell
PostgreSQL Vacuum: Nine Circles of HellPostgreSQL Vacuum: Nine Circles of Hell
PostgreSQL Vacuum: Nine Circles of Hell
 
Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL
 
Data Mining: Graph mining and social network analysis
Data Mining: Graph mining and social network analysisData Mining: Graph mining and social network analysis
Data Mining: Graph mining and social network analysis
 
GitLab PostgresMortem: Lessons Learned
GitLab PostgresMortem: Lessons LearnedGitLab PostgresMortem: Lessons Learned
GitLab PostgresMortem: Lessons Learned
 
Путь к Go на конкретном примере
Путь к Go на конкретном примереПуть к Go на конкретном примере
Путь к Go на конкретном примере
 

Similar to Python и высокая нагрузка

История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей Шетухин
Ontico
 
Опыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыОпыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игры
Yuri Zhloba
 
Юрий Жлоба - Опыт использования Erlang в разработке многопользовательской игры.
Юрий Жлоба -  Опыт использования Erlang в разработке многопользовательской игры.Юрий Жлоба -  Опыт использования Erlang в разработке многопользовательской игры.
Юрий Жлоба - Опыт использования Erlang в разработке многопользовательской игры.
IT Share
 
2013-03-02 02 Дмитрий Пашкевич. Код на стероидах
2013-03-02 02 Дмитрий Пашкевич. Код на стероидах2013-03-02 02 Дмитрий Пашкевич. Код на стероидах
2013-03-02 02 Дмитрий Пашкевич. Код на стероидах
Омские ИТ-субботники
 
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The GrinderИлья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
SQALab
 

Similar to Python и высокая нагрузка (20)

Собеседование на позицию Java Developer
Собеседование на позицию Java DeveloperСобеседование на позицию Java Developer
Собеседование на позицию Java Developer
 
Real-Time Error Alerting & Debugging Tools: Rollbar - Alex Petrov
Real-Time Error Alerting & Debugging Tools: Rollbar - Alex PetrovReal-Time Error Alerting & Debugging Tools: Rollbar - Alex Petrov
Real-Time Error Alerting & Debugging Tools: Rollbar - Alex Petrov
 
История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей Шетухин
 
SymfonyConf IV.2016 - Реанимация проектов на Symfony
SymfonyConf IV.2016 - Реанимация проектов на SymfonySymfonyConf IV.2016 - Реанимация проектов на Symfony
SymfonyConf IV.2016 - Реанимация проектов на Symfony
 
Опыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыОпыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игры
 
Юрий Жлоба - Опыт использования Erlang в разработке многопользовательской игры.
Юрий Жлоба -  Опыт использования Erlang в разработке многопользовательской игры.Юрий Жлоба -  Опыт использования Erlang в разработке многопользовательской игры.
Юрий Жлоба - Опыт использования Erlang в разработке многопользовательской игры.
 
2013-03-02 02 Дмитрий Пашкевич. Код на стероидах
2013-03-02 02 Дмитрий Пашкевич. Код на стероидах2013-03-02 02 Дмитрий Пашкевич. Код на стероидах
2013-03-02 02 Дмитрий Пашкевич. Код на стероидах
 
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp VaultКак перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
 
Денис Кормалев — Qt. Как выжить на минном поле. Советы сапёру
Денис Кормалев — Qt. Как выжить на минном поле. Советы сапёруДенис Кормалев — Qt. Как выжить на минном поле. Советы сапёру
Денис Кормалев — Qt. Как выжить на минном поле. Советы сапёру
 
My talk on Salt and Ansible from DevConf 2014
My talk on Salt and Ansible from DevConf 2014My talk on Salt and Ansible from DevConf 2014
My talk on Salt and Ansible from DevConf 2014
 
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
 
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...
 
Как спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важноКак спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важно
 
Sivko
SivkoSivko
Sivko
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
 
Володимир Дем’яненко, «How to become a Test Automation Engineer. My way»
Володимир Дем’яненко, «How to become a Test Automation Engineer. My way»Володимир Дем’яненко, «How to become a Test Automation Engineer. My way»
Володимир Дем’яненко, «How to become a Test Automation Engineer. My way»
 
Вячеслав Бахмутов
Вячеслав БахмутовВячеслав Бахмутов
Вячеслав Бахмутов
 
python vs ruby
python vs rubypython vs ruby
python vs ruby
 
Salt and Ansible - Python-based CM systems
Salt and Ansible - Python-based CM systemsSalt and Ansible - Python-based CM systems
Salt and Ansible - Python-based CM systems
 
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The GrinderИлья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
 

Python и высокая нагрузка

  • 1. Python и высокая нагрузка Следует ли использовать python там, где нужна высокая нагрузка Александр Шигин, shigin@rambler-co.ru Rambler, 2009
  • 2. Сильные стороны Python’а высокая скорость разработки, библиотеки на все случаи жизни, можно использовать чуть ли не все возможности OS, если что-то тормозит, из этого можно сделать модуль на C, метапрограммирование.
  • 3. Сильные стороны Python’а высокая скорость разработки, но нам прежде всего нужна высокая скорость работы, библиотеки на все случаи жизни, можно использовать чуть ли не все возможности OS, если что-то тормозит, из этого можно сделать модуль на C, метапрограммирование.
  • 4. Сильные стороны Python’а высокая скорость разработки, но адепты функциональных языков утверждают, что скорость разработки на функциональных языках выше, библиотеки на все случаи жизни, можно использовать чуть ли не все возможности OS, если что-то тормозит, из этого можно сделать модуль на C, метапрограммирование.
  • 5. Слабые стороны Python’а отсутствие типизации, скорость работы, GIL.
  • 6. Слабые стороны Python’а отсутствие типизации, да, есть юнит-тесты, но скорость работы они не восполнят, скорость работы, GIL.
  • 7. Слабые стороны Python’а отсутствие типизации, скорость работы, python может (и часто обыгрывает) другие скриптовые языки, но компилируемые языки находятся в другой лиге GIL.
  • 8. Слабые стороны Python’а отсутствие типизации, скорость работы, GIL, это не такая большая проблема, как многие думают, но это проблема.
  • 9. А стоит ли? Почти все преимущества Python’а направлены на удобную и быструю разработку, а не на скорость работы. Если вы не хотите ставить десять серверов там, где справятся три, выберите компилируемый язык.
  • 10. Пару слов про GIL Global Interpretor Lock включается для работы ref-counter’а. его можно отключать во внешних модулях, пока мы не работаем с python’овскими объектами;
  • 11. Пару слов про GIL Global Interpretor Lock включается для работы ref-counter’а. его можно и нужно! отключать во внешних модулях, пока мы не работаем с python’овскими объектами;
  • 12. Пару слов про GIL Global Interpretor Lock включается для работы ref-counter’а. его можно и нужно! отключать во внешних модулях, пока мы не работаем с python’овскими объектами; а для скорости во внешних модулях не надо работать с python’овскими объектами.
  • 13. Чуть-чуть про объекты Объекты это такие специальные словари: при вызове метода каждый раз создается временный объект, даже если мы пишем C-модуль, он всё равно тормозит при доступе к полям объекта, в вырожденных случаях, использование вместо объекта tuple может ускорить программу в 2 раза,
  • 14. Чуть-чуть про объекты Объекты это такие специальные словари: при вызове метода каждый раз создается временный объект, даже если мы пишем C-модуль, он всё равно тормозит при доступе к полям объекта, в вырожденных случаях, использование вместо объекта tuple может ускорить программу в 2 раза, словарь быстрее класса.
  • 15. Чуть-чуть про объекты Не все так плохо: в 2.6 __slots__ дает прирост производительности, ;
  • 16. Чуть-чуть про объекты Не все так плохо: в 2.6 __slots__ дает прирост производительности, но словарь все равно быстрее;
  • 17. Чуть-чуть про объекты Не все так плохо: в 2.6 __slots__ дает прирост производительности, но словарь все равно быстрее; вы можете подумать про структуры на C...
  • 18. Чуть-чуть про boxing/unboxing Например, мы решили использовать модуль array. мы здорово выиграли в памяти; но почти все наши обращения к массиву значительно медленнее, чем было до этого. Почему?
  • 19. Чуть-чуть про boxing/unboxing Например, мы решили использовать модуль array. мы здорово выиграли в памяти; но почти все наши обращения к массиву значительно медленнее, чем было до этого. Каждое обращение к ячейке массива ведет к созданию нового объекта.
  • 20. Запустим профайлер Кривые руки detected
  • 21. Запустим профайлер обычно есть один тормоз, ;
  • 22. Запустим профайлер обычно есть один тормоз, который легко можно ускорить;
  • 23. Запустим профайлер обычно есть один тормоз, который легко можно ускорить; но остальные тормоза размазаны ровным слоем по всей системе;
  • 24. Запустим профайлер обычно есть один тормоз, который легко можно ускорить; но остальные тормоза размазаны ровным слоем по всей системе; я видел программу, которая 50% времени проводила в poll, но которую ускорили на треть.
  • 25. Модуль на C Я считаю рассуждения про функцию, которая выполняется 80% времени мифом. не надо думать, что переписав одну функцию вы заставите остальное работать быстро; из-за python api вам придется переписывать не только функцию, что чаще всего вызывается, но и все функции, которые её вызывают.
  • 26. Как результат... о производительности надо думать заранее;
  • 27. Как результат... о производительности надо думать заранее; заранее представляя себе, что будет переписано на C;
  • 28. Как результат... о производительности надо думать заранее; заранее представляя себе, что будет переписано на C; избегайте python api во внешних модулях; смотрите на Cython,
  • 29. Как результат... о производительности надо думать заранее; заранее представляя себе, что будет переписано на C; избегайте python api во внешних модулях; смотрите на Cython, и внутрь numpy.