Python y la piscina de hilos

Siempre he tenido poblemas con la gestión de hilos en Python a la hora de desarrollar aplicaciones multiproceso. Algunos debidos a ciertas particularidades de las librerías gráficas, fácilmente solucionables, y otros dada la naturaleza dinámicamente impredecible de Python (he usado hilos en Java y Mono, y nunca me han parecido tan inestables en este aspecto).

De casualidad navegando por CRySoL, me he topado con una solución genial para Python, que hace transparente la gestión la ejecución multihilo, de una forma mucho más eficiente que andar construyendo y destruyendo diferentes subprocesos para cada hilo paralelo: tener un almacén o piscina de subprocesos que vayan ejecutando las instrucciones de una cola de ejecución.

Parece complicado, pero veréis que no lo es en absoluto.

EDITO 19.19.2010: Podéis descargar la librería desde: https://arco.esi.uclm.es/svn/public/prj/atheist/pyarco/Thread.py

Podéis descargar la librería desde https://arco.esi.uclm.es/svn/public/prj/pyarco/pyarco/threads.py.

Hacemos una prueba sencilla: pidiendo ejecutar dos veces una función con diferentes parámetros, usando dos hilos en el threadpool, y luego uno sólo.

# -*- mode: python; coding: utf-8 -*-

from time import sleep
from threads import ThreadPool

def messages_sleep(msg1,msg2,tm):
print msg1
sleep(tm)
print msg2

print "Ejecución con un ThreadPool de dos hilos"
p = ThreadPool(2)
p.add(messages_sleep,("iniciando hilo 1 (y esperando 6 segundos)","finalizando hilo 1",6))
p.add(messages_sleep,("iniciando hilo 2 (y esperando 8 segundos)","finalizando hilo 2",8))
p.join() # Esperamos a que terminen los hilos para continuar

print "Ejecución con un ThreadPool de un sólo hilo"
p = ThreadPool(1)
p.add(messages_sleep,("iniciando hilo 1 (y esperando 6 segundos)","finalizando hilo 1",6))
p.add(messages_sleep,("iniciando hilo 2 (y esperando 8 segundos)","finalizando hilo 2",8))
p.join() # Esperamos a que terminen los hilos para continuar

Y el resultado será:

Ejecución con un ThreadPool de dos hilos
iniciando hilo 1 (y esperando 6 segundos)
iniciando hilo 2 (y esperando 8 segundos)
finalizando hilo 1
finalizando hilo 2
Ejecución con un ThreadPool de un sólo hilo
iniciando hilo 1 (y esperando 6 segundos)
finalizando hilo 1
iniciando hilo 2 (y esperando 8 segundos)
finalizando hilo 2

Fuente: Patrón ThreadPool en Python en CRySoL.

Ryzom, publicado como software libre

Me entero hoy, aunque la noticia de la Free software foundation es de ayer, en base a un comunicado hecho por los desarrolladores del juego, anteayer, día 5 de mayo de 2010.

Ryzom es un juego de rol multiplayer masivo, o MMORPG, desarrollado por el estudio francés Nevrax y publicado en septiembre de 2004.

Anteriormente, el motor del juego, ya había sido liberado como GPL, pero esta vez, se trata de todo el contenido, tanto cliente como servidor, y utilidades de desarrollo.

Podría decir que es un hecho histórico y todo eso, pero sólo lo es para quienes apoyamos esto del software libre. Pero sin duda lo que a todos os interesará es que, dentro de poco, empezaremos a ver clientes nativos para múltiples plataformas, en las que incluyo Linux; además de mejoras sustanciales llevadas a cabo por la comunidad, diversificaciones y trabajos derivados.

Habéis abierto la caja de pandora: un MMORPG mínimamente potable siendo software libre. Más libre que incluso que Planeshift, al publicar el código bajo Affero GPLv3 y el trabajo artístico bajo Creative Commons (atribución, compartir igual) versión 3.

Gracias Nevrax.

Vía: Ryzom is free software! What can we do from here? (fsf.org)

Créditos: La imagen está sacada de la página oficial.

Podéis encontrar más información en el artículo de Ryzom de la wikipedia y en su página oficial ryzom.com, ambos enlaces en inglés.

Nautilus elementary

Hay que decirlo: el explorador de ficheros de Gnome, Nautilus, ha pecado de exceso. De exceso de opciones, de exceso de espacio desperdiciado en pantalla, y de exceso de ansia en convertirse en el programa más pesado y peligrosamente integrado en un escritorio que jamás ha compilado en linux.

La gente de Gnome piensa solucionar esto, junto con otros problemas de falta de modularidad (problemas que otros escritorios no tienen, por cierto) con el fin del desarrollo de Gnome 3, en un par de años.

Puesto que a mucha gente nautilus, sin entrar en problemática, le parece feo, o simplemente preferirían un aspecto más al día en su navegador de ficheros, andan circulando varias modificaciones, siendo la más estable (y puede que la más atractiva) la llamada Nautilus elementary.

Elementary reemplaza nautilus, añade algunas opciones y aporta un renovado aspecto, además de permitir a los temas de escritorio el cambiar el estilo de la botonera de direcciones.

Tiene un repositorio disponible en el launchpad, pero tened en cuenta que requiere la última versión de Nautilus a día de hoy, y por ello también Ubuntu Lucid Lynx (10.04 LTS).

Podéis añadir el repositorio rápidamente desde el terminal:

sudo add-apt-repository ppa:am-monkeyd/nautilus-elementary-ppa

O agregando esta línea en orígenes de software (o en la sección de repositorios de la configuración de synaptic):

ppa:am-monkeyd/nautilus-elementary-ppa

Simplemente recargáis la lista de paquetes y actualizáis (pues elementary reemplaza el paquete nautilus), desde synaptic o desde terminal:

sudo apt-get update&&sudo apt-get upgrade

Y recargáis nautilus manualmente ejecutando:

nautilus -q

Talika

Talika es un applet de panel para Gnome que hace la función de selector de ventanas, pero que al contrario que el que viene por defecto en Gnome, muestra sólo los iconos, algo que siempre se ha podido hacer con cierto applet incluído en xfce4 (mi entorno de escritorio preferido).

Recomiendo Talika encarecidamente a quienes el intercambiador de ventanas de ubuntu-netbook-remix os parezca engorroso, o a esos minimalistas empedernidos que sabemos que menos es más.

Por ahora, y a falta de que encuentre algún repositorio que los contenga, podéis obtener los paquetes desde las descargas de su proyecto en sourceforge.

Vía: Talika applet en gnome-look.org

He vuelto

Este blog ha estado sumido en un largo letargo, y apunto he estado de terminar con él, de darle la estocada final, de acabar con su triste vida. No me malinterpretéis, me encanta la web social, me encanta linux, y me encanta echar un cable a la gente con tutoriales, y sí,también dibujar chorradas con inkscape.

Pero se hace muy complicado el mantener vivo un blog, esto es, un medio de comunicación, cuando desde el gobierno fascista de tu país aprueba leyes en contra de la libertad de expresión, cuando las leyes que siguen vigentes son en su mayoría de antes de la transición, promulgadas por un enanísimo dictador con bigote autodenominado fascista ultracatólico, y cuando cualquier organización privada, tiene más poder entre los delincuentes componentes de nuestra adulterada clase política que los intereses generales de varios millones de ciudadanos que, dicho sea de paso, son suficientemente ignorantes (por no decir estúpidos) como para hacer la vista gorda ante tanta desfachatez.

Y os lo digo en prosa, hoy, día anti-DRM, no estoy aquí por todos vosotros, porque algunos soís tan culpables como los que más; no estoy aquí por mí, porque de un día para otro cerraré el chiringuito y abriré un blog en inglés, me iré a alemania y ni mi familia sabrá nada de mí; lo hago por una señorita, desarrolladora de software, algo excéntrica, que me da la vara de vez en cuando para que escriba aquí.

Feliz día anti-DRM.