Módulo de extensión C usando Python

Escribir un módulo de extensión C simple directamente usando la API de extensión de Python y ninguna otra herramienta. Es sencillo hacer un módulo de extensión hecho a mano para un código C simple. Pero primero, debemos asegurarnos de que el código C tenga un archivo de encabezado adecuado. Código #1: #include <math.h>    extern … Continue reading «Módulo de extensión C usando Python»

Operaciones de arrays de alto rendimiento con Cython | conjunto 2

Requisito previo: operaciones de array de alto rendimiento con Cython | Conjunto 1 El código resultante en la primera parte funciona rápido. En este artículo, compararemos el rendimiento del código con la función clip() que está presente en la biblioteca NumPy. En cuanto a la sorpresa, nuestro programa funciona rápido en comparación con el NumPy que … Continue reading «Operaciones de arrays de alto rendimiento con Cython | conjunto 2»

C API del módulo de extensión en Python | Serie 1

Supongamos que se le da un módulo de extensión de C que define internamente una variedad de funciones útiles que se pueden exportar como una API de C pública para usar en otros lugares. Ahora si queremos usar estas funciones dentro de otros módulos de extensión. Entonces, es importante saber cómo enlazarlos entre sí pero … Continue reading «C API del módulo de extensión en Python | Serie 1»

Liberando GIL y mezclando hilos de C y Python

Lanzamiento de GIL en la extensión C: proporcione un código de extensión C y uno debe ejecutarlo simultáneamente con otros subprocesos en el intérprete de Python. Para este Global Interpreter Lock (GIL) tiene que ser liberado y readquirido. Código n.º 1: Liberación y readquisición de GIL mediante la inserción de las siguientes macros #include «Python.h» … Continue reading «Liberando GIL y mezclando hilos de C y Python»

Python | Parcheo de objetos de prueba unitaria | Serie 1

El problema es escribir pruebas unitarias y es necesario aplicar parches a los objetos seleccionados para hacer afirmaciones sobre cómo se usaron en la prueba (por ejemplo, afirmaciones sobre ser llamado con ciertos parámetros, acceso a atributos seleccionados, etc.). Para ello, la unittest.mock.patch()función se puede utilizar para ayudar con este problema. Es un poco inusual, … Continue reading «Python | Parcheo de objetos de prueba unitaria | Serie 1»

Problemas con el uso de código C en Python | Serie 1

Requisito previo: uso de códigos C en Python | Juego 1 , Juego 2 Problema n.º 1: si usa ctypes , existe el problema de que el código C original puede usar un lenguaje que no se asigna claramente a Python. Tomemos el ejemplo de la divide()función, ya que devuelve un valor a través de … Continue reading «Problemas con el uso de código C en Python | Serie 1»

Convertir un puntero de función en invocable

Bueno, se obtiene la dirección de memoria de una función compilada, pero cómo convertirla en Python llamable que se puede usar como una extensión. La respuesta a esto es el uso del módulo ctypes que puede crear un Python invocable y puede envolver una dirección de memoria arbitraria. El siguiente código muestra cómo obtener la … Continue reading «Convertir un puntero de función en invocable»

Python | Punteros opacos en módulos de extensión C

Discutamos un módulo de extensión que necesita manejar un puntero a una estructura de datos C, sin exponer ningún detalle interno de la estructura a Python. Las estructuras de datos opacas se pueden manejar fácilmente envolviéndolas dentro de objetos de cápsula como se muestra en el fragmento de código a continuación. Código #1: typedef struct … Continue reading «Python | Punteros opacos en módulos de extensión C»

Cython para envolver el código C existente

¿Qué es Cython? Es un compilador estático de optimización tanto para el lenguaje de programación Python como para el lenguaje de programación extendido Cython. Se utiliza para facilitar la escritura de extensiones C para Python tan fácilmente como el mismo Python. Viene con muchas características útiles : Escribir un código de Python que llama de … Continue reading «Cython para envolver el código C existente»

Python | Strings C de codificación dudosa | Conjunto-2

El manejo de strings en los módulos de extensión es un problema. Las strings C en las extensiones pueden no seguir las estrictas reglas de codificación/descodificación de Unicode que normalmente espera Python. Por lo tanto, es posible que algunos datos C malformados pasen a Python. Un buen ejemplo podría ser strings C asociadas con llamadas … Continue reading «Python | Strings C de codificación dudosa | Conjunto-2»