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

Скрещиваем ежа с ужом или как подружить питон и…

Скрещиваем ежа с ужом или как подружить питон и…

Доклад о методах и пользе внедрения и использования библиотек, написанных на си в программах на питоне. Про то как работает ассинхронность и многопоточность в подобных случаях. Как обстоят дела с GIL и другие подводные камни.

Также Максим расскажет о плюсах и минусах подобных подходов и о существующих вариантах решений

Moscow Python Meetup

October 08, 2015
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Скрещиваем ежа с ужом или как подружить питон и… Шаламов

    Максим ведущий Python-разработчик в Rambler&Co
  2. 40 50+ 500+ 1500 млн человек суммарная аудитория группы количество

    изданий, сервисов и проектов разработчиков человек в хорошей компании
  3. Livejournal Gazeta.ru Begun Price Ferra Redigo Letidor Канобу Видео Секрет

    фирмы Рамблер Инфографика Новости Почта Финансы Недвижимость Погода Гороскопы Субботний Рамблер Путешествия Касса Еда Город Воздух Волна Рестораны Мослента Lenta.ru Афиша Motor Championat Quto Рамблер Видеостудия
  4. Контакты В группе компаний Rambler&Co всегда есть открытые вакансии для

    тех, кто хочет профессионально расти и развиваться, занимаясь тем, что по-настоящему нравится [email protected] www.rambler-co.ru/jobs !
  5. О чем пойдет речь? • Как решить указанные проблемы с

    использованием языка С • Cython • C extension • SWIG • FFI • ctypes • cffi
  6. Зачем нам подключать внешние библиотеки • Увеличение скорости работы алгоритмов

    • Реальная многопоточность • Использование уже существующего функционала, написанного на C
  7. CPython native C extensions • Относительно сложно и долго •

    Тема для отдельного доклада • Пример: https://goo.gl/lq3NZS • Пример: http://goo.gl/wfpn2V
  8. Что такое Cython? • Язык программирования, упрощающий написание модулей С/С++

    кода для Python. • Код Cython преобразуется в С/С++ код для последующей компиляции. • Поддерживает прямой вызов функций и методов С/С++ из кода на Cython и строгую типизацию переменных, классов, атрибутов классов. • Имеет очень близкий синтаксис к Python.
  9. Как это работает? • Пишем код в файле с расширением

    pyx • В setup.py файле указываем параметры компиляции • Компилируем: python setup.py build_ext — inplace • Импортируем полученный результат как обычный модуль
  10. SWIG • Создает часть оберток на С/C++, часть на Python

    • Есть особенности под разные платформы
  11. SWIG (общий подход) • Нам нужен файл с кодом *.c

    • Создаем интерфейсный файл *.i, в котором описываем подключенный файл и функции • Выполняем команды компиляции • Импортируем полученный модуль в код на Python
  12. FFI - Foreign Function Interface • интерфейс вызова внешних функций

    • позволяет программам, написанным на одном языке вызывать программы написанные на другом языке
  13. Плюсы ffi • ffi расширения можно компилировать или подключать в

    runtime • ffi расширения мультиплатформенные • ffi расширения просты для понимания и написания
  14. libffi • Она обеспечивает интерфейс на языке С для вызова

    функций во время выполнения, а не во время компиляции • Может указывать на функцию, которая обрабатывает любое количество аргументов определенных в runtime
  15. ctypes • это C-расширение, ссылающееся на libffi и Python код

    для связки с ней • позволяет вызвать внешние C-функции из Python кода • может использоваться для написания оберток над внешними библиотеками • часть стандартной библиотеки Python • Минусы: • сложный api
  16. cffi • Нужны знания только языков C и Python •

    Основная логика пишется на Python, на C пишется только то, что необходимо • Позволяет избежать излишних C-объявлений, сам находит объявление функций и переменных • Работа с С-библиотекой, как с Python библиотекой • Минусы • Не входит в стандартную библиотеку Python
  17. Личное мнение • Самый сложный и мощный инструмент: • C

    extensions • Самый простой и удобный инструмент: • cffi, ctypes • Самый простой способ ускорить алгоритм: • Cython • Самой простой способ подключать C++ библиотеки: • SWIG, Cython
  18. Контакты В группе компаний Rambler&Co всегда есть открытые вакансии для

    тех, кто хочет профессионально расти и развиваться, занимаясь тем, что по-настоящему нравится [email protected] www.rambler-co.ru/jobs !