Python - C -utvidelser

Innholdsfortegnelse

Språket til programmering C Det har blitt gjort tilgjengelig for programvareutviklere i mange år, og som et kompilert språk kan vi gjøre programmer mye mer optimale og raskere, takket være dette er dette språket fortsatt i kraft siden det gjør at forskjellige typer behandling kan utføres raskt.

I Python Kraften til å utvikle seg på en lesbar og vennlig måte kommer med en liten pris, som er at ytelse kan gå tapt i noen veldig spesifikke prosesser, så hvis dette tapet ikke er akseptabelt og setter vårt program i fare, må vi se etter alternativer. Fleksibiliteten gjør at vi kan innlemme moduler laget på andre språk som C.

Skrive utvidelser i C
å skrive C -utvidelser er ikke så gjennomsiktig som å gjøre det i C # eller i JAVA at med de forskjellige Python -implementeringene gjør vi det veldig raskt og enkelt, med C må vi følge en API veldig strenge, men disse vanskelighetene har ført til verktøy som prøver å forbedre denne prosessen, en av dem er SVIG.

SVIG er et akronym for Enkel innpakning og grensesnittgenerator er et verktøy som lar oss utvikle utvidelser i C eller C ++ og deretter pakke dem for bruk på språk på høyt nivå som f.eks. Python, Perl, Rubin og andre.

Hva gjør SWIG?
Å bruke SVIG Vi må bare utføre noen få enkle trinn, la oss se hva vi trenger videre:

  • Vi må skrive et grensesnitt for vår C -kode. Denne filtypen ligner veldig på overskrifter; i noen tilfeller kan du bruke toppteksten direkte.
  • Vi løper SVIG i grensesnittfilen forårsaker dette at mer kode genereres i C, det vil si innpakningen.
  • Vi kompilerer filen grensesnitt sammen med emballasjen som vi genererer et delt bibliotek som vi kan bruke med språkene som er kompatible med SVIG.

Litt øvelse
Etter å ha mestret litt teori, la oss nå se et eksempel på dette som vi har forklart, vi skal lage en modul som oppdager om en streng er palindrom, det vil si at den leses på samme måte i begge retninger, dette er ikke at det representerer et problem å PythonMen når de er virkelig store strenger, kan ytelsesproblemet bli lagt merke til, la oss først se koden i bildet nedenfor og deretter se hvordan implementer det ved hjelp av SWIG:

Her har vi implementeringen i C, for å vite om en streng er palindrome, så bygger vi grensesnittet som er følgende kode:

Siden vi har de komplette kravene på C-nivå, skal vi for nå se hva vi må gjøre SVIG for å kunne bruke dette:

Først må vi kjøre følgende kommando:

 $ swig -python palindrome.i
Hvor palindrome.i det er vårt grensesnitt. Dette vil generere filene Python nødvendig, så må vi kompilere alt, for dette trinnet må vi veldig godt kjenne banene til elementene våre for å kunne gjøre de riktige referansene:
 gcc -c palindrome.c gcc -I $ PYTHON_HOME -I $ PYTHON_HOME / Inkluder -c palindrome_wrap.c gcc -delt palindrome.o palindrome_wrap.o -o _palindrome.so 
Etter disse trinnene kan vi bruke vårt nye bibliotek i Python som følger:
 >>> import _palindrome >>> dir (_palindrome) ['__doc__', '__file__', '__name__', 'is_palindrome'] >>> _palindrome.is_palindrome ('ipreferpi') 1 >>> _palindrome.is_palindrome ('notlob ') 0 
Med dette fullfører vi opplæringen, som vi ser er det litt komplekst implementere utvidelser i C men oppnådd ytelse er verdt det.

Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave