Tecnología

Inicio

¿Qué es una GIL Python?

¿Qué es una GIL Python?


Si usted ha estado trabajando con Python y quiere empezar a experimentar con técnicas de programación más avanzados, aprender acerca de cierre global del intérprete (GIL) es una buena idea. GIL es un algoritmo que se encarga de la ejecución de múltiples hilos en un programa Python. GIL es un requisito cuando se está trabajando con varios subprocesos porque la gestión de la memoria de CPython no es seguro para subprocesos. Además, el GIL ha sido conocido para degradar un rendimiento de programas. Un ejemplo es que puede tomar más tiempo para dos hilos para llamar a la misma función de un hilo llamando a la función dos veces.

usando GIL

En un programa multi-hilo del pitón de un hilo no puede acceder con seguridad a los objetos de Python a menos que el GIL se lleva a cabo por el flujo actual. El GIL se asegura de que ambos hilos están actualizando correctamente las referencias a objetos que se llama. Para empezar a utilizar el GIL necesita guardar el estado del hilo en una variable de ubicación y suelte el cierre global del intérprete. En este punto usted puede realizar su operación de entrada / salida de bloqueo y volver a adquirir el bloqueo global intérprete cuando es completa. Por último, restaurar el estado del hilo de la variable local. Se puede utilizar el siguiente ejemplo de macro para simplificar el proceso:

Py_BEGIN_ALLOW_THREADS
... Hacer una operación de E / S de bloqueo ...
Py_END_ALLOW_THREADS

Llamar código Python

A menudo, las discusiones se crean a partir de otros lenguajes de programación como C y si es necesario llamar a varios subprocesos entonces es necesario utilizar GIL. Primero debe registrar estos hilos con un intérprete a través de una estructura de datos de estado del hilo y luego adquirir el GIL. Para simplificar este proceso se puede utilizar el "PyGILState_Ensure) (" y "PyGILState_Release ()" funciones. El siguiente es un ejemplo de cómo aplicar este concepto:

PyGILState_STATE GSTATE;
GSTATE = PyGILState_Ensure ();
/ Realizar acciones de Python aquí. /
resultado = CallSomeFunction ();
/ Evaluar resultado o manejar excepción /
/ Soltar el hilo. No API Python permitió que más allá de este punto. /
PyGILState_Release (GSTATE);

Hilos de Python

En Python un hilo de rosca es un verdadero sistema como cualquier otra ejecución del programa. Cuando se ejecuta un hilo Python crea una pequeña estructura de datos con el estado intérprete. Después de esto se puso en marcha un nuevo hilo y que llama la "PyEval_CallObject." El último paso es una simple función C que corre a lo especificado Python. El GIL controla cuidadosamente cada ejecución del hilo. El siguiente es un ejemplo de un hilo de Python:

tiempo de importación
enhebrado de importación
clase CountdownThread (threading.Thread):
init def (sí, el recuento):
threading.Thread. init (auto)
self.count = recuento
def run (auto):
mientras self.count> 0:
imprimir "Cuenta atrás", self.count
self.count - = 1
time.sleep (5)
regreso

Problemas GIL y sustitución

desarrolladores de Python han discutido la eliminación de GIL, pero se han encontrado con algunos problemas. Uno de los problemas que suele mencionarse en GIL es que evita que los programas CPython multiproceso de aprovechar al máximo los procesadores multi-núcleo. Cualquier sustitución GIL debe ser simple y simultáneo cuando se trabaja con hilos. Debe ser más rápido que GIL y debe tener una buena compatibilidad API. Un ejemplo de la compatibilidad de la API es tener un buen trazado cuando se enumeran los objetos que lo han generado.