Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Об использовании PyPy в production

Об использовании PyPy в production

Константин Лопухин (ЧТД)
Что такое PyPy и чем он хорош? Особенности PyPy. Библиотеки для работы с БД. Варианты deploy. Профилировка.

Moscow Python Meetup

December 21, 2012
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. . . • Что такое PyPy • Библиотеки • Deployment

    . . . Использование PyPy в production
  2. . . • Что такое PyPy • Библиотеки • Deployment

    Использование PyPy в production ▶ Что такое PyPy ▶ Библиотеки ▶ Deployment . . . 2
  3. . . • Что такое PyPy • Библиотеки • Deployment

    Что такое PyPy ▶ реализация языка Python 2.7 ▶ ведутся работы над Python 3.2 ▶ framework для создания быстрых интерпретаторов ▶ написан на Python! . . . 3
  4. . . • Что такое PyPy • Библиотеки • Deployment

    Особенности реализации ▶ Just-in- me компилятор ▶ Который генерируется по интерпретатору ▶ Который написан на (R)Python . . . 6
  5. . . • Что такое PyPy • Библиотеки • Deployment

    JIT → бесплатные абстракции ▶ быстрые вызывы функций, inlining ▶ не создаются ненужные промежуточные объекты ▶ не нужны глупые микрооптимизации . . . 7
  6. . . • Что такое PyPy • Библиотеки • Deployment

    На Python → хитрые оптимизации ▶ Компактное хранение списков: int, float, range ▶ Компактное хранение словарей объектов . . . 8
  7. . . • Что такое PyPy • Библиотеки • Deployment

    List strategies Компактное хранение int, float: expression CPython, G PyPy, G [] 0.004 0.035 range(2**26) 2.04 0.035 [x for x in xrange(2**26)] 2.04 0.548 . . . 9
  8. . . • Что такое PyPy • Библиотеки • Deployment

    Dict strategies class Point(object): def __init__(self, x, y): self.x, self.y = x, y field = [Point(i, j) for i in xrange(1000) for j in xrange(1000)] CPython, M PyPy, M 370 176 . . . 10
  9. . . • Что такое PyPy • Библиотеки • Deployment

    Профилировка ▶ cProfile ▶ jitViewer ▶ сложно понять от чего зависит скорость . . . 11
  10. . . • Что такое PyPy • Библиотеки • Deployment

    Проблемы ▶ warm up me ▶ немного медленнее импорт ▶ иногда run me и stdlib медленнее чем в CPython ▶ C-extensions . . . 12
  11. . . • Что такое PyPy • Библиотеки • Deployment

    Библиотеки ▶ python: работают ▶ ctypes: работают ▶ CPython API: it depends ▶ CFFI: работают . . . 13
  12. . . • Что такое PyPy • Библиотеки • Deployment

    CPython API PyPy эмулирует часть CPython API, и многим библиотекам этого достаточно. Работают: ▶ PIL ▶ MySQL-python ▶ lxml (90%) . . . 14
  13. . . • Что такое PyPy • Библиотеки • Deployment

    CPython API Не работают: ▶ NumPy, SciPy (но есть micronumpy) ▶ psycopg2 . . . 15
  14. . . • Что такое PyPy • Библиотеки • Deployment

    CFFI Новая библиотека от разработчиков PyPy, работает в: ▶ CPython 2.x ▶ CPython 3.x ▶ PyPy 2.0 . . . 16
  15. . . • Что такое PyPy • Библиотеки • Deployment

    CFFI: пример ffi.cdef(""" struct passwd { char *pw_name; ...; }; struct passwd *getpwuid(int uid); """) C = ffi.verify(""" #include <sys/types.h> #include <pwd.h> """, libraries=[]) p = C.getpwuid(0) assert ffi.string(p.pw_name) == 'root' . . . 17
  16. . . • Что такое PyPy • Библиотеки • Deployment

    Работа с БД: PostgreSQL ▶ psycopg2: только под CPython ▶ psycopg2-ctypes: PyPy, медленно, не поддерживается ▶ psycopg2-cffi: PyPy, быстро! . . . 18
  17. . . • Что такое PyPy • Библиотеки • Deployment

    Работа с БД: MySQL ▶ MySQLdb: CPython и PyPy, медленнее под PyPy ▶ mysql-ctypes: не поддерживается . . . 20
  18. . . • Что такое PyPy • Библиотеки • Deployment

    Установка wget https://.../pypy-2.0.tar.bz2 tar jxf pypy-2.0.tar.bz2 virtualenv . -p pypy-2.0/bin/pypy . . . 23
  19. . . • Что такое PyPy • Библиотеки • Deployment

    Сборка из исходников wget http://.../release-2.0.tar.bz2 tar jxf release-2.0.tar.bz2 cd release-2.0/pypy/translator/goal python -Ojit translate.py . . . 24
  20. . . • Что такое PyPy • Библиотеки • Deployment

    Выкатка Создание дистрибутива pip bundle -r requirements.txt distr.pybundle Установка дистрибутива virtualenv . -p pypy source bin/activate pip install distr.pybundle . . . 25
  21. . . • Что такое PyPy • Библиотеки • Deployment

    Web-сервер ▶ mod_wsgi не работает ▶ Nginx или Apache: статика + прокси ▶ gunicorn + supervisord: Python сервер . . . 26
  22. . . • Что такое PyPy • Библиотеки • Deployment

    Итого 1. Смотрим на зависимости 2. Пишем/выбираем бенчмарки 3. Смотрим на скорость . . . 27
  23. . . • Что такое PyPy • Библиотеки • Deployment

    Вопросы? ▶ Константин Лопухин ▶ konstan [email protected] ▶ https: //github.com/chtd/psycopg2cffi ▶ CHTD - http://chtd.ru ▶ Twi er: @python_chtd . . . 28