Pregunta

A menudo ver gente hablando de que el GIL es por intérprete Python (incluso aquí en stackoverflow).

Pero lo que veo en el código fuente, parece ser que el GIL es una variable global y por lo tanto hay una GIL para todos los intérpretes en cada proceso pitón. Sé que hicieron esto porque no hay ningún objeto intérprete pasado alrededor como lua o no TCL, que fue diseñado simplemente no así en el principio. Y el hilo de almacenamiento local parece no ser portátil para los chicos Python para su uso.

¿Es esto correcto? Tenía un breve vistazo a la versión 2.4 que estoy usando en un proyecto aquí.

Si esto hubiera cambiado en versiones posteriores, especialmente en 3.0?

¿Fue útil?

Solución

El GIL es de hecho por proceso, no per-intérprete. Esto no ha cambiado en 3.x.

Otros consejos

Tal vez la confusión se produce porque la mayoría de la gente asume Python tiene un intérprete por proceso. Recuerdo haber leído que el soporte para múltiples intérpretes a través de la API C fue en gran parte no probado y casi nunca se utiliza. (Y cuando me dio una oportunidad, no funcionó correctamente.)

Creo que es cierto (al menos a partir de Python 2.6) que cada proceso puede tener como máximo un intérprete CPython incorporados (otros tiempos de ejecución pueden tener diferentes restricciones). No estoy seguro si esto es un problema con el GIL per se, pero es probable que se deba a estado global, o para proteger entren en conflicto el estado global de módulos de terceros C. Desde el CPython API Docs :

  

[Py ___ Initialize ()] es un no-op cuando se le llama por segunda vez (sin llamar Py_Finalize () primero). No hay ningún valor de retorno; se trata de un error grave si falla la inicialización.

Quizás se encuentre interesado en el trago des proyecto, que tiene como objetivo final quitar el GIL enteramente de CPython. Otros tiempos de ejecución de Python no tienen el GIL en absoluto, al igual que (creo) Stackless Python , y ciertamente < a href = "http://www.jython.org/" rel = "noreferrer nofollow"> Jython .

También se nota que el GIL es todavía presente en CPython 3.x .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top