[ad_1]
Una manera conveniente de hacer esto automáticamente es usar el sys._is_gil_enabled()
método para comprobar si es necesario utilizar la macro. Una receta como esta podría funcionar:
macros = []
if getattr(sys, "_is_gil_enabled", None) and not sys._is_gil_enabled():
macros = [("Py_GIL_DISABLED","1")]
ext_modules = [
Extension(
"compute",
["compute.pyx"],
define_macros=macros
)
]
4. Asegúrese de que su código sea seguro para subprocesos
La seguridad de los subprocesos en los módulos Cython siempre ha sido responsabilidad del programador, al menos en lo que respecta al código C puro. Si llama al intérprete CPython usando Cython, incluso en la compilación de subprocesos libres, el intérprete manejará los recuentos de referencias para esos objetos (aunque no hará nada con respecto a las carreras de datos). Pero cualquier función de Cython que se ejecute simultáneamente no debe manipular los mismos datos.
Nuevos tipos de anotaciones para constantes, punteros y valores volátiles.
A medida que Cython ha evolucionado, se ha ido alejando gradualmente de su sintaxis personalizada de Python, pero no del todo. El Cython moderno utiliza una sintaxis que es esencialmente Python normal con sugerencias de tipo, administradores de contexto y otras construcciones agregadas por Cython.
[ad_2]
Enlace fuente