Python - C-Erweiterungen

Inhaltsverzeichnis

Die Sprache von Programmierung C Es wird Softwareentwicklern seit vielen Jahren zur Verfügung gestellt, da wir als kompilierte Sprache Programme viel optimaler und schneller machen können.

In Python Die Leistung, lesbar und freundlich zu entwickeln, hat einen kleinen Preis, der darin besteht, dass bei einigen sehr spezifischen Prozessen Leistung verloren gehen kann. Wenn dieser Verlust also nicht akzeptabel ist und unser Programm gefährdet, müssen wir nach Alternativen suchen. Seine Flexibilität ermöglicht es uns, Module in anderen Sprachen wie C zu integrieren.

Erweiterungen in C . schreiben
schreiben C-Erweiterungen ist nicht so transparent wie es in C # oder in JAVA dass wir es mit den verschiedenen Python-Implementierungen sehr schnell und einfach machen, bei C müssen wir uns an a API sehr streng, aber diese Schwierigkeiten haben zu Werkzeugen geführt, die versuchen, diesen Prozess zu verbessern, eine davon ist SCHLUCK.

SCHLUCK ist ein Akronym für Einfacher Wrapper- und Interface-Generator ist ein Tool, mit dem wir Erweiterungen in C oder C++ entwickeln und anschließend für den Einsatz in Hochsprachen wie Python, Perl, Rubin und andere.

Was macht SWIG?
Benutzen SCHLUCK Wir müssen nur ein paar einfache Schritte ausführen, mal sehen, was wir als nächstes brauchen:

  • Wir müssen eine Schnittstelle für unseren C-Code schreiben, diese Art von Datei ist der Überschriften; in einigen Fällen können Sie die Header-Datei direkt verwenden.
  • Wir rennen SCHLUCK in der Interface-Datei führt dies dazu, dass mehr Code in C, also dem Wrapper, generiert wird.
  • Wir stellen die Datei zusammen Schnittstelle zusammen mit dem Paketierer, mit dem wir eine gemeinsame Bibliothek generieren, die wir mit den Sprachen verwenden können, die kompatibel sind SCHLUCK.

Ein bisschen üben
Nachdem wir ein wenig Theorie gemeistert haben, sehen wir uns nun ein Beispiel dafür an, das wir erklärt haben. Wir werden ein Modul erstellen, das erkennt, ob ein String ein Palindrom ist, dh dass er in beide Richtungen auf die gleiche Weise gelesen wird, dies ist es nicht so, dass es ein Problem darstellt, PythonWenn es sich jedoch um wirklich große Strings handelt, kann das Leistungsproblem bemerkt werden. Sehen wir uns zuerst den Code im folgenden Bild an und sehen wir dann, wie implementieren Sie es mit SWIG:

Hier haben wir die Implementierung in C, um zu wissen, ob ein String ein Palindrom ist, dann bauen wir die Schnittstelle, die der folgende Code ist:

Da wir die vollständigen C-Level-Anforderungen haben, werden wir vorerst sehen, was wir in SCHLUCK um das nutzen zu können:

Zuerst müssen wir den folgenden Befehl ausführen:

 $ swig -python palindrome.i
Wo palindrom.i es ist unsere Schnittstelle. Dadurch werden die Dateien generiert Python notwendig, dann müssen wir alles kompilieren, für diesen Schritt müssen wir die Pfade unserer Elemente sehr gut kennen, um die richtigen Referenzen vornehmen 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:
 >>> import _palindrome >>> dir (_palindrome) ['__doc__', '__file__', '__name__', 'is_palindrome'] >>> _palindrome.is_palindrome ('ipreferpi') 1 >>> _palindrome.is_notpalindrome (' ') 0 
Damit beenden wir das Tutorial, da wir sehen, dass es etwas komplex ist Erweiterungen in C . implementieren aber die erreichte leistung ist es wert.

Hat dir dieses Tutorial gefallen und geholfen?Sie können den Autor belohnen, indem Sie diesen Knopf drücken, um ihm einen positiven Punkt zu geben
wave wave wave wave wave