Die Programmiersprache C ist seit vielen Jahren für Softwareentwickler verfügbar, da es sich um eine kompilierte Sprache handelt, mit der wir Programme viel optimaler und schneller erstellen können. Dank dieser Sprache ist sie immer noch gültig, da sie verschiedene Arten der Verarbeitung ermöglicht auf schnelle Weise.
In Python ist die Fähigkeit, sich lesbar und benutzerfreundlich zu entwickeln, mit einem geringen Preis verbunden, der darin besteht, dass Sie bei bestimmten Prozessen an Leistung verlieren können. Wenn dieser Verlust nicht akzeptabel ist und unser Programm gefährdet, sollten wir nach Alternativen suchen. Dank seiner Flexibilität können wir Module integrieren, die in anderen Sprachen wie C erstellt wurden.
Das Schreiben von Erweiterungen in C ist nicht so transparent wie in C # oder JAVA. Mit den verschiedenen Implementierungen von Python geht das sehr schnell und einfach. Mit C müssen wir eine sehr strenge API einhalten Um diesen Prozess zu verbessern, ist einer von ihnen SWIG .
SWIG ist eine Abkürzung für Simple Wrapper und Interface Generator ist ein Tool, mit dem wir Erweiterungen in C oder C ++ entwickeln und sie dann für die Verwendung in Hochsprachen wie Python , Perl , Ruby und anderen verpacken können.
Um SWIG zu nutzen, müssen wir nur ein paar einfache Schritte ausführen. Nachfolgend sehen wir, was wir brauchen:
- Wir müssen eine Schnittstelle für unseren Code in C schreiben. Dieser Dateityp ist den Headern sehr ähnlich. In einigen Fällen können Sie die Header-Datei direkt verwenden.
- Wir führen SWIG in der Interface-Datei aus. Dadurch wird mehr Code in C generiert, dh im Packer.
- Wir kompilieren die Schnittstellendatei zusammen mit dem Packer und generieren eine gemeinsam genutzte Bibliothek, die wir mit den mit SWIG kompatiblen Sprachen verwenden können.
Nachdem wir ein bisschen Theorie beherrschen, wollen wir ein Beispiel dafür sehen, das wir erklärt haben. Wir werden ein Modul erstellen, das erkennt, ob eine Zeichenfolge palindrom ist, das heißt, dass sie in beide Richtungen auf die gleiche Weise gelesen wird. Dies ist kein Problem Für Python können Sie jedoch das Leistungsproblem feststellen, wenn es sich um sehr große Zeichenfolgen handelt. Sehen wir uns zunächst den Code in der folgenden Abbildung an und sehen dann, wie er mit SWIG implementiert wird:
Hier haben wir die Implementierung in C, um zu wissen, ob eine Zeichenfolge palindrom ist, dann erstellen wir die Schnittstelle, die den folgenden Code enthält:
Da wir die vollständigen C-Level-Anforderungen haben, werden wir jetzt sehen, was wir in SWIG tun müssen, um dies nutzen zu können:
Zuerst müssen wir den folgenden Befehl ausführen:
$ swig -python palindrome.i
Wo palindrome.i ist unsere Schnittstelle. Dadurch werden die erforderlichen Python- Dateien generiert. Dann müssen wir alles kompilieren. Für diesen Schritt müssen wir die Routen unserer Elemente sehr gut kennen, um die richtigen Referenzen erstellen zu können:
gcc -c palindrome.c gcc -I $ PYTHON_HOME -I $ PYTHON_HOME / Include -c palindrome_wrap.c gcc -shared palindrome.o palindrome_wrap.o -o _palindrome.so
Nach diesen Schritten können wir unsere neue Bibliothek in Python wie folgt verwenden:
>>> _palindrome importieren >>> dir (_palindrome) ['__doc__', '__file__', '__name__', 'is_palindrome'] >>> _palindrome.is_palindrome ('ipreferpi') 1 >>> _palindrome.is_palindrome ('notlob') 0
Hiermit schließen wir das Tutorial ab, da die Implementierung von Erweiterungen in C etwas kompliziert ist. Die erzielte Leistung ist es jedoch wert.