Подтвердить что ты не робот

Обучающие программы Noob-Ready Cython

Я знаю кучу языков сценариев (python, ruby, lua, php), но я не знаю каких-либо скомпилированных языков, таких как C/С++, я хотел попробовать и ускорить некоторый код python, используя cython, что по существу компилятор python → C, предназначенный для создания C-расширений для python. В основном вы кодируете более строгую версию python, которая компилируется в C → собственный код.

вот проблема, я не знаю C, но документация cython нацелена на людей, которые, очевидно, уже знают C (ничего не объяснено, только представлено), и мне не помогает, мне нужно знать, есть ли там какие-нибудь хорошие учебники для cython, предназначенные для программистов на питоне, или если мне нужно научиться C, прежде чем я узнаю Cython.

Помните, что я компетентный программист на питоне, я бы скорее изучил cython с точки зрения языка, на котором я уже хорошо разбираюсь, вместо того, чтобы изучать совершенно новый язык, чтобы изучать cython.

1) ПОЖАЛУЙСТА не рекомендуйте psyco

edit: Любая информация, которая поможет понять официальные документы cython, - полезная информация.

4b9b3361

Ответ 1

Изучите C! (Извините - неотразимый.)

Серьезно, однако, похоже, вам в основном нужно знать о C переменных типах (типы C, если хотите), чтобы использовать cdef эффективно.

Позже, если вы решите укусить пулю и правильно изучить C, обратитесь к копии Kernighan и Ritchie, или K и R, доступный на Amazon.

Ответ 2

cython хорош в двух разных вещах

  • Взаимодействие с библиотеками языка C.
  • Ускорение кода Python

Вероятно, он получает больше воздействия от 1. Следовательно, акцент делается на учебниках, которые вы нашли в материалах C. Похоже, вы хотите использовать его как 2. хотя.

Из моего опыта работы с cython вы можете просто попробовать скомпилировать свои программы python и посмотреть, работает ли он. Это будет немного быстрее (возможно). Чтобы ускорить работу, вам нужно выборочно переводить типы python в типы C. Это начинает вызывать силу cython.

Если вы посмотрите официальный официальный учебник, вам нужно изучить, где они использовали ключевое слово cdef.

Итак, чтобы повторить

  • Сделайте свою существующую программу python с помощью cython с минимальными изменениями
  • Объявить некоторые переменные как cdef и заставить его работать снова
  • Если не достаточно быстро перейдите к шагу 2.

Мне жаль, что это не указатель на учебник, но он должен дать вам направление!

Ответ 3

Вы видели это: http://www.perrygeo.net/wordpress/?p=116 кажется довольно хорошим обзором. Вы также можете взглянуть на источник в pyzmq и gevent - они используют Cython для своего основного кода.

Бен

Ответ 4

Cython поддерживает concurrency (вы можете использовать собственные потоки POSIX с c, которые могут быть скомпилированы в модуле расширения), вам просто нужно быть достаточно осторожным, чтобы не изменять какие-либо объекты python при выпуске GIL и сохранять что сам интерпретатор не является потокобезопасным. Вы также можете использовать многопроцессорную обработку с помощью python для использования большего количества ядер для parallelism, которые, в свою очередь, могут использовать ваши скомпилированные расширения cython, чтобы ускорить еще больше. Но в целом вам определенно нужно знать модель программирования c, статические типы и т.д.

Ответ 5

Вы можете сделать очень много полезных вещей с Cython, если вы можете ответить на следующий опрос C...

(1) Что такое двойной? Что такое int?

(2) Что означает слово "compile"?

(3) Что такое файл заголовка (.h)?

Чтобы ответить на эти вопросы, вам не нужно читать целую книгу C!... может быть, глава 1.

Как только вы сможете пройти эту викторину, попробуйте еще раз с помощью учебника.

То, что я обычно делаю, начинается с чистого кода на Python и постепенно добавляет элементы Cython. В этой ситуации вы можете постепенно изучать функции Cython. Например, я не понимаю строки C, потому что до сих пор я не пытался цитировать код, который включает строки. Когда я это сделаю, я сначала посмотрю, как строки работают на C, а затем второй раз посмотрите, как строки работают в Cython.

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

Ответ 7

О всех C, которые вам действительно нужны,

  • Типы C намного быстрее, чем типы Python (добавление к C int или удвоениям может выполняться за один такт), но менее безопасно (они не произвольно не сортируются и могут бесшумно переполняться).
  • Функции C (cdef) намного быстрее, чем вызовы функций Python (def) (но менее гибкие).

Это даст вам большую часть пути. Если вы хотите, чтобы последние 10-20% ускорились для большинства приложений, не обойтись знанием C и как работают современные процессы (указатели, кеш,...).

Ответ 8

Cython не поддерживает нити вообще. Он держит GIL (Global Intrepreter Lock) все время! Это делает ваш код безвредным (практически) отключением параллельного выполнения. Поэтому я бы не использовал его для разработки общего назначения.