Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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