[Python-es] trabajo con hilos de ejecución

lasizoillo lasizoillo en gmail.com
Sab Abr 9 12:57:01 CEST 2011


El día 9 de abril de 2011 01:57, Daπid <davidmenhur en gmail.com> escribió:
> Y hay que tener en cuenta que esto no es cálculo en paralelo. Con esto
> sólo estás interpretando una línea de Python a la vez.
>

Si usa la implementación de python de la página de python.org
(cpython), tu afirmación es válida siempre en uno de los hilos no
llame a un módulo que pueda liberar el GIL. Si usa implementaciones de
python como la de jython o ironpython, si que threading se ejecutará
de forma paralela (aunque puede ser que se encuentre con otras
contrapartidas). Esa limitación está asociada a la implementación de
python y no a su especificación.

Lo anterior es relevante si se usa threading para cálculo de cpu
paralelo. Si se usan hilos para escapar de bloqueos de io, viene bien
que exista el GIL (hablo de cpython). Un bloqueo global es más ligero
que la complejidad necesaria para hacer un bloqueo de grano fino.
Todas las implementaciones de cpython sin GIL que he visto no dejaban
de perder entre un 20-40% de rendimiento con un solo hilo.

Para escapar del GIL también está la opción de usar el módulo
multiprocessing[1]. Y dado que esta diseñado para tener un API similar
a threading no debe haber mucho problema para usarlo si se conoce el
módulo threading.

[1] http://docs.python.org/library/multiprocessing.html

Saludos:

Javi


Más información sobre la lista de distribución Python-es