Python и высокая нагрузка
-
Upload
alexander-shigin -
Category
Documents
-
view
2.457 -
download
2
description
Transcript of Python и высокая нагрузка
![Page 1: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/1.jpg)
Python и высокая нагрузкаСледует ли использовать python там, где нужна
высокая нагрузка
Александр Шигин, [email protected]
Rambler, 2009
![Page 2: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/2.jpg)
Сильные стороны Python’а
высокая скорость разработки,библиотеки на все случаи жизни,можно использовать чуть ли не всевозможности OS,если что-то тормозит, из этого можносделать модуль на C,метапрограммирование.
![Page 3: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/3.jpg)
Сильные стороны Python’а
высокая скорость разработки, но нам преждевсего нужна высокая скорость работы,библиотеки на все случаи жизни,можно использовать чуть ли не всевозможности OS,если что-то тормозит, из этого можносделать модуль на C,метапрограммирование.
![Page 4: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/4.jpg)
Сильные стороны Python’а
высокая скорость разработки, но адептыфункциональных языков утверждают, чтоскорость разработки на функциональныхязыках выше,библиотеки на все случаи жизни,можно использовать чуть ли не всевозможности OS,если что-то тормозит, из этого можносделать модуль на C,метапрограммирование.
![Page 5: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/5.jpg)
Слабые стороны Python’а
отсутствие типизации,скорость работы,GIL.
![Page 6: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/6.jpg)
Слабые стороны Python’а
отсутствие типизации, да, есть юнит-тесты,но скорость работы они не восполнят,скорость работы,GIL.
![Page 7: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/7.jpg)
Слабые стороны Python’а
отсутствие типизации,скорость работы, python может (и частообыгрывает) другие скриптовые языки, нокомпилируемые языки находятся в другойлигеGIL.
![Page 8: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/8.jpg)
Слабые стороны Python’а
отсутствие типизации,скорость работы,GIL, это не такая большая проблема, какмногие думают, но это проблема.
![Page 9: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/9.jpg)
А стоит ли?
Почти все преимущества Python’а направлены наудобную и быструю разработку, а не на скоростьработы.
Если вы не хотите ставить десять серверов там,где справятся три, выберите компилируемыйязык.
![Page 10: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/10.jpg)
Пару слов про GIL
Global Interpretor Lock включается для работыref-counter’а.
его можно
и нужно!
отключать во внешнихмодулях, пока мы не работаем сpython’овскими объектами;
а для скорости во внешних модулях не надоработать с python’овскими объектами.
![Page 11: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/11.jpg)
Пару слов про GIL
Global Interpretor Lock включается для работыref-counter’а.
его можно и нужно! отключать во внешнихмодулях, пока мы не работаем сpython’овскими объектами;
а для скорости во внешних модулях не надоработать с python’овскими объектами.
![Page 12: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/12.jpg)
Пару слов про GIL
Global Interpretor Lock включается для работыref-counter’а.
его можно и нужно! отключать во внешнихмодулях, пока мы не работаем сpython’овскими объектами;а для скорости во внешних модулях не надоработать с python’овскими объектами.
![Page 13: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/13.jpg)
Чуть-чуть про объекты
Объекты — это такие специальные словари:при вызове метода каждый раз создаетсявременный объект,даже если мы пишем C-модуль, он всё равнотормозит при доступе к полям объекта,в вырожденных случаях, использованиевместо объекта tuple может ускоритьпрограмму в 2 раза,
словарь быстрее класса.
![Page 14: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/14.jpg)
Чуть-чуть про объекты
Объекты — это такие специальные словари:при вызове метода каждый раз создаетсявременный объект,даже если мы пишем C-модуль, он всё равнотормозит при доступе к полям объекта,в вырожденных случаях, использованиевместо объекта tuple может ускоритьпрограмму в 2 раза,словарь быстрее класса.
![Page 15: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/15.jpg)
Чуть-чуть про объекты
Не все так плохо:в 2.6 __slots__ дает приростпроизводительности,
но словарь все равнобыстрее
;
вы можете подумать про структуры на C...
![Page 16: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/16.jpg)
Чуть-чуть про объекты
Не все так плохо:в 2.6 __slots__ дает приростпроизводительности, но словарь все равнобыстрее;
вы можете подумать про структуры на C...
![Page 17: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/17.jpg)
Чуть-чуть про объекты
Не все так плохо:в 2.6 __slots__ дает приростпроизводительности, но словарь все равнобыстрее;вы можете подумать про структуры на C...
![Page 18: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/18.jpg)
Чуть-чуть про boxing/unboxing
Например, мы решили использовать модуль array.мы здорово выиграли в памяти;но почти все наши обращения к массивузначительно медленнее, чем было до этого.
Почему?
Каждое обращение к ячейке массиваведет к созданию нового объекта.
![Page 19: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/19.jpg)
Чуть-чуть про boxing/unboxing
Например, мы решили использовать модуль array.мы здорово выиграли в памяти;но почти все наши обращения к массивузначительно медленнее, чем было до этого.
Каждое обращение к ячейке массива ведет ксозданию нового объекта.
![Page 20: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/20.jpg)
Запустим профайлер
Кривые руки detected
![Page 21: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/21.jpg)
Запустим профайлер
обычно есть один тормоз,
который легкоможно ускорить
;
но остальные тормоза размазаны ровнымслоем по всей системе;я видел программу, которая 50% временипроводила в poll, но которую ускорили натреть.
![Page 22: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/22.jpg)
Запустим профайлер
обычно есть один тормоз, который легкоможно ускорить;
но остальные тормоза размазаны ровнымслоем по всей системе;я видел программу, которая 50% временипроводила в poll, но которую ускорили натреть.
![Page 23: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/23.jpg)
Запустим профайлер
обычно есть один тормоз, который легкоможно ускорить;но остальные тормоза размазаны ровнымслоем по всей системе;
я видел программу, которая 50% временипроводила в poll, но которую ускорили натреть.
![Page 24: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/24.jpg)
Запустим профайлер
обычно есть один тормоз, который легкоможно ускорить;но остальные тормоза размазаны ровнымслоем по всей системе;я видел программу, которая 50% временипроводила в poll, но которую ускорили натреть.
![Page 25: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/25.jpg)
Модуль на C
Я считаю рассуждения про функцию, котораявыполняется 80% времени мифом.
не надо думать, что переписав одну функциювы заставите остальное работать быстро;из-за python api вам придется переписыватьне только функцию, что чаще всеговызывается, но и все функции, которые еёвызывают.
![Page 26: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/26.jpg)
Как результат...
о производительности надо думать заранее;
заранее представляя себе, что будетпереписано на C;избегайте python api во внешних модулях;смотрите на Cython,и внутрь numpy.
![Page 27: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/27.jpg)
Как результат...
о производительности надо думать заранее;заранее представляя себе, что будетпереписано на C;
избегайте python api во внешних модулях;смотрите на Cython,и внутрь numpy.
![Page 28: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/28.jpg)
Как результат...
о производительности надо думать заранее;заранее представляя себе, что будетпереписано на C;избегайте python api во внешних модулях;смотрите на Cython,
и внутрь numpy.
![Page 29: Python и высокая нагрузка](https://reader031.fdocuments.net/reader031/viewer/2022020717/5586767dd8b42a931d8b45b7/html5/thumbnails/29.jpg)
Как результат...
о производительности надо думать заранее;заранее представляя себе, что будетпереписано на C;избегайте python api во внешних модулях;смотрите на Cython,и внутрь numpy.