Para aprovechar la fortaleza de ambos lenguajes, los desarrolladores usan enlaces de Python que les permiten llamar a bibliotecas C/C++ desde Python.
Ahora, surge la pregunta de por qué es necesario hacer esto.
- Como sabemos, C tiene una velocidad de ejecución más rápida y para superar la limitación de Global Interpreter Lock (GIL) en python, los enlaces de python son útiles.
- Tenemos una biblioteca grande, estable y probada en C/C++, que será una ventaja para usar.
- Para realizar pruebas a gran escala de los sistemas utilizando las herramientas de prueba de Python.
Veamos el código C que queremos ejecutar con Python:
C++
#include <iostream> class Geek{ public: void myFunction(){ std::cout << "Hello Geek!!!" << std::endl; } }; int main() { // Creating an object Geek t; // Calling function t.myFunction(); return 0; }
Tenemos que proporcionar esas declaraciones de cpp como «C» externa porque los ctypes solo pueden interactuar con funciones de C.
C++
extern "C" { Geek* Geek_new(){ return new Geek(); } void Geek_myFunction(Geek* geek){ geek -> myFunction(); } }
Ahora, compile este código en la biblioteca compartida:
Finalmente, escriba el contenedor de python:
Python3
# import the module from ctypes import cdll # load the library lib = cdll.LoadLibrary('./libgeek.so') # create a Geek class class Geek(object): # constructor def __init__(self): # attribute self.obj = lib.Geek_new() # define method def myFunction(self): lib.Geek_myFunction(self.obj) # create a Geek class object f = Geek() # object method calling f.myFunction()
Producción :
Hello Geek!!!
Publicación traducida automáticamente
Artículo escrito por tanvi_jain y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA