Python - C-extensies

Inhoudsopgave

De taal van programmeren C Het is al vele jaren beschikbaar voor softwareontwikkelaars, omdat het een gecompileerde taal is, kunnen we programma's veel optimaler en sneller maken, dankzij deze taal is deze taal nog steeds van kracht omdat verschillende soorten verwerking snel kunnen worden uitgevoerd.

In Python De kracht om zich op een leesbare en vriendelijke manier te ontwikkelen, heeft een kleine prijs, namelijk dat prestatie verloren kan gaan in sommige zeer specifieke processen, dus als dit verlies niet acceptabel is en ons programma in gevaar brengt, moeten we naar alternatieven zoeken. Dankzij de flexibiliteit kunnen we modules opnemen die in andere talen zijn gemaakt, zoals C.

Extensies schrijven in C
schrijven C-extensies is niet zo transparant als het doen in C # of in JAVA dat we het met de verschillende Python-implementaties heel snel en gemakkelijk maken, met C moeten we ons houden aan a API zeer strikt, maar deze moeilijkheden hebben geleid tot tools die dit proces proberen te verbeteren, een daarvan is: SLOK.

SLOK is een acroniem voor Eenvoudige Wrapper en Interface Generator is een tool waarmee we extensies in C of C ++ kunnen ontwikkelen en deze vervolgens kunnen verpakken voor gebruik in talen op hoog niveau, zoals Python, Perl, Robijn en anderen.

Wat doet SWIG?
Gebruiken SLOK We hoeven slechts een paar eenvoudige stappen uit te voeren, laten we eens kijken wat we vervolgens nodig hebben:

  • We moeten een interface schrijven voor onze C-code, dit type bestand lijkt erg op de kopteksten; in sommige gevallen kunt u het headerbestand rechtstreeks gebruiken.
  • Wij rennen SLOK in het interfacebestand zorgt dit ervoor dat er meer code wordt gegenereerd in C, dat wil zeggen de wrapper.
  • We compileren het bestand koppel samen met de packager waarmee we een gedeelde bibliotheek genereren die we kunnen gebruiken met de talen die compatibel zijn met SLOK.

Een beetje oefenen
Nadat we een beetje theorie onder de knie hebben, laten we nu een voorbeeld hiervan bekijken dat we hebben uitgelegd, we gaan een module maken die detecteert of een string een palindroom is, dat wil zeggen dat het in beide richtingen op dezelfde manier wordt gelezen, dit is niet dat het een probleem vormt om PythonAls het echter echt grote strings zijn, kan het prestatieprobleem worden opgemerkt, laten we eerst de code in de volgende afbeelding bekijken en dan kijken hoe implementeer het met SWIG:

Hier hebben we de implementatie in C, om te weten of een string palindroom is, dan bouwen we de interface die de volgende code is:

Aangezien we de volledige C-level vereisten hebben, gaan we nu kijken wat we moeten doen in SLOK om dit te kunnen gebruiken:

Eerst moeten we het volgende commando uitvoeren:

 $ swig -python palindrome.i
Waar palindroom.i het is onze interface. Dit zal de bestanden genereren Python nodig, dan moeten we alles compileren, voor deze stap moeten we de paden van onze elementen heel goed kennen om de juiste verwijzingen te kunnen maken:
 gcc -c palindrome.c gcc -I $ PYTHON_HOME -I $ PYTHON_HOME / Inclusief -c palindrome_wrap.c gcc -shared palindrome.o palindrome_wrap.o -o _palindrome.so 
Na deze stappen kunnen we onze nieuwe bibliotheek gebruiken in Python als volgt:
 >>> import _palindrome >>> dir (_palindrome) ['__doc__', '__file__', '__name__', 'is_palindrome'] >>> _palindrome.is_palindrome ('ipreferpi') 1 >>> _palindrome.is_palindrome ('notlob ') 0 
Hiermee ronden we de tutorial af, zoals we zien is het een beetje ingewikkeld extensies implementeren in C de behaalde prestaties zijn het echter waard.

Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een ​​positief punt te geven

U zal helpen de ontwikkeling van de site, het delen van de pagina met je vrienden

wave wave wave wave wave