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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  4. .
    .
    • Что такое PyPy
    • Библиотеки
    • Deployment
    Быстрее в 5.7 раз
    .
    .
    .
    4

    View full-size slide

  5. .
    .
    • Что такое PyPy
    • Библиотеки
    • Deployment
    Прогресс
    .
    .
    .
    5

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  9. .
    .
    • Что такое 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

    View full-size slide

  10. .
    .
    • Что такое 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  19. .
    .
    • Что такое PyPy
    • Библиотеки
    • Deployment
    Работа с БД: PostgreSQL
    .
    .
    .
    19

    View full-size slide

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

    View full-size slide

  21. .
    .
    • Что такое PyPy
    • Библиотеки
    • Deployment
    Работа с БД: MySQL
    .
    .
    .
    21

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  24. .
    .
    • Что такое 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide