[PyVigo] Understanding the GIL

Jesus Cea jcea at jcea.es
Wed Jun 3 20:43:50 CEST 2015


On 03/06/15 20:04, José Manuel Ciges Regueiro wrote:
> Si he entendido bien, entonces la multitarea en Pyrhon no debe usarse si
> nuestro código no realiza operaciones de entrada y salida. Para tareas
> de uso únicamente de CPU de hecho es contraproducente, ¿no?

En líneas generales sí, pero hay muchos casos a considerar. Si tu
programa satura un core ejecutando código 100% python entonces meter
hilos no te va a ayudar, pero si tu programa usa librerías en C que
chupan CPU es muy normal liberar el GIL mientras la CPU está ahí dentro.

Por ejemplo, las rutinas de HASH incluídas en cpython liberan el GIL si
el tamaño del bloque a procesar supera un tamaño determinado. No se hace
siempre porque liberar y recuperar el GIL tiene coste, así que hay que
valorar cuándo compensa soltarlo.

El código relevante en Python 3.5.0 -que saldrá en septiembre- es:

Fichero "Modules/hashlib.h":

"""
/* TODO(gps): We should probably make this a module or EVPobject attribute
 * to allow the user to optimize based on the platform they're using. */
#define HASHLIB_GIL_MINSIZE 2048
"""

Fichero "Modules/_hashopenssl.c":

"""
[...]
        if (view.len >= HASHLIB_GIL_MINSIZE) {
            Py_BEGIN_ALLOW_THREADS
            EVP_hash(self, view.buf, view.len);
            Py_END_ALLOW_THREADS
        } else {
            EVP_hash(self, view.buf, view.len);
        }
[...]
"""

Hay otras muchas librerías que recurren a trucos similares, así que en
la práctica las cosas son muchos más complicadas que CPU-Bound y IO-Bound.

Yo os recomendaría que no os preocupéis mucho del asunto. En el 99% de
los casos no tiene importancia práctica y en el 1% restante hay
soluciones aceptables. Alguien comentó por Twitter hace tiempo que "el
GIL es el ébola de Python: todo el mundo habla de él pero nadie conoce a
nadie que haya muerto de eso".

No digo que el tema no sea importante sino que si os ha sorprendido leer
que es tan chungo en el PDF y no lo habíais notado hasta ahora, será por
algo.

-- 
Jesús Cea Avión                         _/_/      _/_/_/        _/_/_/
jcea at jcea.es - http://www.jcea.es/     _/_/    _/_/  _/_/    _/_/  _/_/
Twitter: @jcea                        _/_/    _/_/          _/_/_/_/_/
jabber / xmpp:jcea at jabber.org  _/_/  _/_/    _/_/          _/_/  _/_/
"Things are not so easy"      _/_/  _/_/    _/_/  _/_/    _/_/  _/_/
"My name is Dump, Core Dump"   _/_/_/        _/_/_/      _/_/  _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: OpenPGP digital signature
URL: <https://lists.es.python.org/pipermail/vigo/attachments/20150603/42de126e/attachment-0001.asc>


More information about the Vigo mailing list