Python - Extensions C

Table des matières

La langue de programmation C Il est mis à la disposition des développeurs de logiciels depuis de nombreuses années, étant un langage compilé, nous pouvons rendre les programmes beaucoup plus optimaux et plus rapides, grâce à cela, ce langage est toujours en vigueur car il permet d'effectuer rapidement différents types de traitement.

Dans Python Le pouvoir de développer de manière lisible et conviviale a un petit prix, à savoir que les performances peuvent être perdues dans certains processus très spécifiques, donc si cette perte n'est pas acceptable et met notre programme en danger, nous devons chercher des alternatives. Sa flexibilité nous permet d'intégrer des modules réalisés dans d'autres langages comme le C.

Écrire des extensions en C
Écrire rallonges C n'est pas aussi transparent que de le faire dans C # ou en JAVA qu'avec les différentes implémentations Python, nous le rendons très rapide et facile, avec C nous devons adhérer à un API très stricte, cependant ces difficultés ont conduit à des outils qui tentent d'améliorer ce processus, l'un d'entre eux est LAMPÉE.

LAMPÉE est un acronyme pour Wrapper simple et générateur d'interface est un outil qui nous permet de développer des extensions en C ou C++ puis de les packager pour une utilisation dans des langages de haut niveau tels que Python, Perl, Rubis et autres.

Que fait SWIG ?
Utiliser LAMPÉE Nous devons simplement suivre quelques étapes simples, voyons ce dont nous avons besoin ensuite :

  • Nous devons écrire une interface pour notre code C, ce type de fichier est très similaire au en-têtes; dans certains cas, vous pouvez utiliser directement le fichier d'en-tête.
  • Nous courrons LAMPÉE dans le fichier d'interface, cela entraîne la génération de plus de code en C, c'est-à-dire le wrapper.
  • Nous compilons le fichier interface avec le packager avec lequel nous générons une bibliothèque partagée que nous pouvons utiliser avec les langages compatibles avec LAMPÉE.

Un peu de pratique
Ayant maîtrisé un peu la théorie, voyons maintenant un exemple de cela que nous avons expliqué, nous allons faire un module qui détecte si une chaîne est palindrome, c'est-à-dire qu'elle est lue de la même manière dans les deux sens, ce n'est-ce pas que cela représente un problème pour PythonCependant, lorsqu'il s'agit de chaînes vraiment volumineuses, le problème de performances peut être remarqué, voyons d'abord le code dans l'image suivante, puis voyons comment implémentez-le à l'aide de SWIG :

Ici on a l'implémentation en C, pour savoir si une chaîne est palindrome, alors on construit l'interface qui est le code suivant :

Puisque nous avons les exigences complètes du niveau C, pour l'instant nous allons voir ce que nous devons faire en LAMPÉE pour pouvoir l'utiliser :

Nous devons d'abord exécuter la commande suivante :

 $ swig -python palindrome.i
palindrome.i c'est notre interface. Cela va générer les fichiers Python nécessaire, alors nous devons tout compiler, pour cette étape nous devons très bien connaître les chemins de nos éléments pour pouvoir faire les bonnes références :
 gcc -c palindrome.c gcc -I $ PYTHON_HOME -I $ PYTHON_HOME / Inclure -c palindrome_wrap.c gcc -shared palindrome.o palindrome_wrap.o -o _palindrome.so 
Après ces étapes, nous pouvons utiliser notre nouvelle bibliothèque dans Python comme suit:
 >>> import _palindrome >>> dir (_palindrome) ['__doc__', '__file__', '__name__', 'is_palindrome'] >>> _palindrome.is_palindrome ('ipreferpi') 1 >>> _palindrome.is_palindrome ('notlob ') 0 
Avec cela, nous terminons le tutoriel, comme nous le voyons, c'est un peu complexe implémenter des extensions en C Cependant, les performances obtenues en valent la peine.

Avez-vous aimé et aidé ce tutoriel ?Vous pouvez récompenser l'auteur en appuyant sur ce bouton pour lui donner un point positif

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave