Python - C разширения

Съдържание

Езикът на програмиране C Той е предоставен на разработчиците на софтуер в продължение на много години, като компилиран език можем да направим програмите много по -оптимални и по -бързи, благодарение на това този език все още е в сила, тъй като позволява бързо да се извършват различни видове обработка.

В Python Силата да се развиваме по четим и приятелски начин идва с малка цена, която е, че производителността може да бъде загубена в някои много специфични процеси, така че ако тази загуба не е приемлива и излага програмата ни на риск, трябва да търсим алтернативи. Неговата гъвкавост ни позволява да включим модули, направени на други езици, като C.

Писане на разширения в C
да напише C разширения не е толкова прозрачно, колкото го правите ° С # или в ДЖАВА че с различните реализации на Python го правим много бързо и лесно, с C трябва да се придържаме към a API много строги, но тези трудности доведоха до инструменти, които се опитват да подобрят този процес, един от тях е SWIG.

SWIG е съкращение за Прост обвивка и генератор на интерфейси е инструмент, който ни позволява да разработваме разширения на C или C ++ и след това да ги пакетираме за използване в езици на високо ниво, като например Python, Perl, Руби и други.

Какво прави SWIG?
Да използвам SWIG Трябва само да изпълним няколко прости стъпки, нека видим какво ни трябва по -нататък:

  • Трябва да напишем интерфейс за нашия C код, този тип файл е много подобен на заглавки; в някои случаи можете да използвате директно заглавния файл.
  • Ние бягаме SWIG в интерфейсния файл, това води до генериране на повече код в C, тоест обвивката.
  • Компилираме файла интерфейс заедно с пакетиращия, с който генерираме споделена библиотека, която можем да използваме със съвместимите езици SWIG.

Малко практика
След като усвоихме малко теория, нека сега видим пример за това, който обяснихме, ще направим модул, който открива дали низ е палиндром, тоест че се чете по един и същи начин в двете посоки, това не че представлява проблем за PythonВъпреки това, когато те са наистина големи низове, проблемът с производителността може да бъде забелязан, нека първо да видим кода в следното изображение и след това да видим как внедрете го с помощта на SWIG:

Тук имаме реализацията в C, за да разберем дали низ е палиндром, след това изграждаме интерфейса, който е следният код:

Тъй като имаме пълните изисквания на ниво C, засега ще видим какво трябва да направим SWIG за да можете да използвате това:

Първо трябва да изпълним следната команда:

 $ swig -питон palindrome.i
Където палиндром.i това е нашият интерфейс. Това ще генерира файловете Python необходимо, тогава трябва да компилираме всичко, за тази стъпка трябва да знаем много добре пътищата на нашите елементи, за да можем да правим правилните препратки:
 gcc -c palindrome.c gcc -I $ PYTHON_HOME -I $ PYTHON_HOME / Включва -c palindrome_wrap.c gcc -споделен palindrome.o palindrome_wrap.o -o _palindrome.so 
След тези стъпки можем да използваме нашата нова библиотека в Python както следва:
 >>> import _palindrome >>> dir (_palindrome) ['__doc__', '__file__', '__name__', 'is_palindrome'] >>> _palindrome.is_palindrome ('ipreferpi') 1 >>> _palindrome.is_palindrome ('notlob ') 0 
С това завършваме урока, тъй като виждаме, че е малко сложен внедряване на разширения в C постигнатото представяне обаче си заслужава.

Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка

Така ще помогнете за развитието на сайта, сподели с приятелите си

wave wave wave wave wave