Cython эксперимент. Часть #0

Начинаю эксперимент в написании контента. Описание эксперимента по ссылке

Это первая часть, "Cython - что это и зачем".

Cython - что это?

Cython - язык программирования, упрощающий написание модулей С для Python (здесь и далее Python==CPython)

С натяжкой можно сказать что Cython — это Python с типами данных языка C.

Cython — это Python, в том смысле, что почти любой код на Python будет валидным с точки зрения Cython. (список не совместимых элементов, в версии 1.0 планируется обеспечить полную совместимость Cython с Python).

Однако Cython больше чем просто Python:

  • Аргументам и переменным можно задавать типы языка C.
    • Типы именно из языка C, а не из модуля typing стандартной библиотеки питона
  • В коде можно параллельно использовать данные Python-типов и C-типов
    • Преобразование типов осуществляется автоматически, где это возможно
  • Работает подсчет ссылок и проверка ошибок в Python-операциях
    • Доступна мощь обработки ошибок Питона, в том числе конструкции try-except и try-finally, — даже в коде обработки данных C-типов.

И что самое интересное, Cython код преобразуется компилятором (не будем делить на элементы) в C код. Такое преобразование позволяет добиться прироста скорости в сотни раз по сравнению с Python.

А если хотите еще больше извращений, то вот! Начиная с версии 0.17 Cython код легко портируется в PyPy код :)

Cython - зачем это?

Cython хорошо подходит для двух типов задач:

  • Обертка над C/C++ библиотекой
  • Число-дробилки

С помощью Cython можно легко соединить C библиотеку с Python. Но не только получать данные, но и отправлять туда данные. Иными словами, вы можете писать комбинированный код.

Как делаются число-дробилки на Python? Берется numpy (или что-то на его основе) и "готово". Но если скорости не хватает и у вас идеально подобран и написан алгоритм, можно взять Cython. Как говорилось выше, Cython компилируется в C, а numpy здесь такой же.

Что дальше

В канале Cython Python чата - https://python-ru.slack.com/messages/cython вы можете задавать вопросы об Cython - что это такое, зачем, как использовать и установить и запустить.

Через 3 дня будет написан новый пост "Установка Cython и запуск Hello World"

Ссылки

Набор полезных ссылок:

Источники:

Рейтинг
Текущий рейтинг: 4,7


Комментарии

Python-конференция

Теги

notify, os, isinstance, encode, database, all, многопоточность, mail, срез, сборник, pytest, новый год, конкурентность, аргумент, pycon, gevent, GIL, интерпретатор, python проект, игры, замыкание, copy, функциональное программирование, pynotify, pypi, типы данных, csv, график, testing, поиск ошибок, автоматизация, ardruio, swagger, память, файл, pip, тест, web, статический анализ, dsl, syntax, отчет, список, ide, графика, notification, rest, pycallgraph, githook, generic, hook. webhook, история, asyncio, logging, инструмент, swig, click, crawler, while, aiohttp, clonedigger, оптимизация, трансдьюсер, matplotlib, Бизли, bottle, концепция, типизация, fuzzy-testing, урок, language, путь, nose, image, тестирование, консоль, vk, c, list, operator, pylint, print, практика, сравнение, functools, измерение, польза, selenium, сопроцедуры, генерация данных, БД, мастер класс, plotly, tests, bokeh, генерация, производительность, winapi, flask, typing, strip, lxml, grab, scandir, Qt, pycharm, проект, книга, dictwriter, coverage, html, фп, pypy, signal, стандартная библиотека, now, weakref, google, практика программирования, corotine, sqlalchemy, nameko, синтаксис, import, паттер, virtualenv, api, зеленый поток, timeit, контекст, бд, funcy, encoding, кэш, json, статистика, байт-код, unittest, кодировка, opencv, datetime, ооп, itertools, package, fp, mixin, python, assert, pyqt, утка, garbage collector, курс, frozenset, numpy, django-debug-toolbar, терминал, xpath, closure, type, дубликат, requirements, статическая типизация, PIL, работа, debug, быстродействие, plot, рейтинг, водяной знак, ip, python3, yield from, видео, test, fuzzy, curses, gitter, unicode, decode, cache, twitter, pep, вконтакте, операционная система, ОС, тесты, any, awesome, задача, последовательность, geoip, ошибки, генератор, hardcore, toolbar, Wx, qt, магия, doctest, железо, marshal, множество, сигнал, greenlet, слайс, future, db, время, admin, pyside, regex, module, slots, примесь, sys, email, action, requirementstxt, регулярные выражения, дубликат кода, одноплатный компьютер, scrapinghub, micropython, фича, mock, raspberry pi, foreign key, ссылка, django, нг, pickle, модуль, celery, справочник, импорт, лямбда, rpc, with, наука, jinja2, log, обработка текста, super, set, svg, матрица, pygame, fixture, docstring, fabric, декларативный язык, пакет, опыт, магическая переменная, regexp, Гвидо, slice, gui, база данных, vkcom, юникод, yattag, ospath, cython, unit, maxmind, матан, документация, анализатор, Tags, менеджер контекста, yield, учебник, real-time, слабая ссылка, IPython, браузер, xml, GUI, gc, channel, машинное обучение, zip, библиотека, ошибка, данные, оповещение, парсинг, изображение, CLI, tox, фильтр, R, feedly, cffi, http, таблицы, python2, gunicorn, стандарт, if, requests, rss, tkinter, time, mechanize, gensim, интерфейс, enum, визуализация, postgresql, web parsing, язык, исключение, архитектура, lstrip, parsing, путь до файла, copy paste, multiprocessing, rstrip, статический анализатор, lambda