Publicidad

RSS Multiprocesamiento en Python

Multiprocesamiento en Python: Threads a fondo, enumeración, herencia y temporizadores

1 Comentario
Multiprocesamiento en Python: Threads a fondo, enumeración, herencia y temporizadores

addEventListener('load', function (event) { prettyPrint() }, false);

En el anterior artículo de la serie nos introdujimos más a fondo en el manejo de hilos en Python. En esta nueva entrega de multiprocesamiento en Python vamos a ver los threads aún más a fondo aprendiendo a enumerar todos los threads, heredar del objeto Thread y usar threads con temporizador. En cada nuevo artículo de la serie iremos profundizando cada vez más en los entresijos del multiprocesamiento en Python y pondremos nuestros conocimientos en práctica escribiendo una serie de benchmarks y tests para comprobar que nuestras aplicaciones se comportan como esperamos de ellas.
Leer más »

Multiprocesamiento en Python: Threads a fondo, introducción

1 Comentario
Multiprocesamiento en Python: Threads a fondo, introducción

addEventListener('load', function (event) { prettyPrint() }, false);

En anteriores artículos de la serie hemos hablado sobre la diferencia entre multi hilo y multi proceso en CPython y sobre el Global Interpreter Lock y como esquivarlo en nuestras aplicaciones.

En esta nueva entrega de multiprocesamiento en Python vamos a iniciar un recorrido a fondo por los hilos y su uso hasta que no tengan secretos para nosotros. En este primer post vamos a hacer una ligera introducción.

Los hilos permiten a nuestras aplicaciones ejecutar múltiples operaciones de forma concurrente en el mismo espacio de proceso. El módulo utilizado para ello es el módulo threading.

Leer más »
Publicidad

Multiprocesamiento en Python: Benchmarking

9 Comentarios
Multiprocesamiento en Python: Benchmarking

addEventListener('load', function (event) { prettyPrint() }, false);

En el artículo anterior indagábamos en las diferentes vías de las que disponemos a la hora de minimizar el impacto del GIL en nuestras aplicaciones en sistemas con más de un procesador.

Como ya se ha dicho anteriormente, el GIL impide que más de un hilo de ejecución en nuestras aplicaciones se ejecute a la vez en más de un núcleo de la CPU al necesitar cada hilo de ejecución en un mismo intérprete adquirir el GIL para poder acceder a la memoria de los objetos Python en la implementación de CPython.

La solución más sencilla (y la recomendada además por Guido van Rossum) para utilizar mas de un núcleo o procesador a la vez en nuestras aplicaciones es hacer uso del módulo multiproccessing en lugar del módulo threading con el que comparte casi toda su API.

Leer más »

Multiprocesamiento en Python: Esquivando el GIL

Comentar
Multiprocesamiento en Python: Esquivando el GIL

addEventListener('load', function (event) { prettyPrint() }, false);

En el anterior artículo hicimos una introducción al Global Interpreter Lock (GIL) donde vimos qué es y por qué es necesario en la implementación de CPython.

En este nuevo artículo de multiprocesamiento en Python vamos a aprender a "esquivar" el GIL antes de meternos más a fondo en aspectos más avanzados del multiprocesamiento en Python y las diversas formas que tenemos de utilizar múltiples núcleos de la CPU.

CPython implementa mecanismos para liberar el GIL de forma automática cuando una cierta cantidad de bytecode ha sido ejecutado por el intérprete. Cuando una aplicación de Python se ejecuta, el intérprete compila los módulo y archivos a bytecode que son las instrucciones que finalmente el intérprete ejecuta.

Leer más »

Multiprocesamiento en Python: Global Interpreter Lock (GIL)

16 Comentarios
Multiprocesamiento en Python: Global Interpreter Lock (GIL)

addEventListener('load', function (event) { prettyPrint() }, false);



Python, como la práctica totalidad de los lenguajes modernos, soporta el uso de múltiples hilos de ejecución. La implementación más extendida y utilizada del lenguaje es sin duda CPython muy por delante de Jython y de IronPython, implementaciones en Java y C# para plataforma .NET respectivamente.

La implementación del intérprete en C siempre ha sido bastante más rápida que las implementaciones en Java y .NET en la mayoría de los benchmarks exceptuando aquellos en los que se usan múltiples hilos en sistemas que disponen más de un procesador o procesadores con más de un núcleo.

Esto es debido a que la implementación de CPython solo permite que un único thread ejecute bytecode a la vez por lo que se pierde la potencia de los sistemas SMP. En este artículo de multiprocesamiento en Python vamos a hacer una introducción al Global Interpreter Lock (GIL).

Leer más »
Publicidad
Inicio
Inicio

Ver más artículos