29
Python и высокая нагрузка Следует ли использовать python там, где нужна высокая нагрузка Александр Шигин, [email protected] Rambler, 2009

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

Embed Size (px)

DESCRIPTION

Один из этапов поготовки к блиц-докладу. Пост-бета версия, очень слабо соотносится с релиз-кандидатом.

Citation preview

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

Python и высокая нагрузкаСледует ли использовать python там, где нужна

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

Александр Шигин, [email protected]

Rambler, 2009

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

Сильные стороны Python’а

высокая скорость разработки,библиотеки на все случаи жизни,можно использовать чуть ли не всевозможности OS,если что-то тормозит, из этого можносделать модуль на C,метапрограммирование.

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

Сильные стороны Python’а

высокая скорость разработки, но нам преждевсего нужна высокая скорость работы,библиотеки на все случаи жизни,можно использовать чуть ли не всевозможности OS,если что-то тормозит, из этого можносделать модуль на C,метапрограммирование.

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

Сильные стороны Python’а

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

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

Слабые стороны Python’а

отсутствие типизации,скорость работы,GIL.

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

Слабые стороны Python’а

отсутствие типизации, да, есть юнит-тесты,но скорость работы они не восполнят,скорость работы,GIL.

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

Слабые стороны Python’а

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

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

Слабые стороны Python’а

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

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

А стоит ли?

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

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

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

Пару слов про GIL

Global Interpretor Lock включается для работыref-counter’а.

его можно

и нужно!

отключать во внешнихмодулях, пока мы не работаем сpython’овскими объектами;

а для скорости во внешних модулях не надоработать с python’овскими объектами.

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

Пару слов про GIL

Global Interpretor Lock включается для работыref-counter’а.

его можно и нужно! отключать во внешнихмодулях, пока мы не работаем сpython’овскими объектами;

а для скорости во внешних модулях не надоработать с python’овскими объектами.

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

Пару слов про GIL

Global Interpretor Lock включается для работыref-counter’а.

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

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

Чуть-чуть про объекты

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

словарь быстрее класса.

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

Чуть-чуть про объекты

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

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

Чуть-чуть про объекты

Не все так плохо:в 2.6 __slots__ дает приростпроизводительности,

но словарь все равнобыстрее

;

вы можете подумать про структуры на C...

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

Чуть-чуть про объекты

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

вы можете подумать про структуры на C...

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

Чуть-чуть про объекты

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

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

Чуть-чуть про boxing/unboxing

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

Почему?

Каждое обращение к ячейке массиваведет к созданию нового объекта.

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

Чуть-чуть про boxing/unboxing

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

Каждое обращение к ячейке массива ведет ксозданию нового объекта.

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

Запустим профайлер

Кривые руки detected

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

Запустим профайлер

обычно есть один тормоз,

который легкоможно ускорить

;

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

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

Запустим профайлер

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

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

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

Запустим профайлер

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

я видел программу, которая 50% временипроводила в poll, но которую ускорили натреть.

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

Запустим профайлер

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

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

Модуль на C

Я считаю рассуждения про функцию, котораявыполняется 80% времени мифом.

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

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

Как результат...

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

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

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

Как результат...

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

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

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

Как результат...

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

и внутрь numpy.

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

Как результат...

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