[Python-es] Threads con operaciones I/O en Python

lasizoillo lasizoillo en gmail.com
Jue Jun 10 23:00:27 CEST 2010


El día 10 de junio de 2010 18:44, Félix Palazuelos Pérez
<felixpalazuelos en gmail.com> escribió:
> Ya he empezado a programar y tengo un hilo con el puerto serie funcionando.
> Solo comparto una lista de acciones entre la GUI y el hilo. Append, y pop
> uso. No controlo los hilos con ninún mutex y nunca me tira excepción, aún
> teniendolos en bucle infinito a los dos hilos haciendo append y pop. He
> mirado el módulo Queue que parece que me podría ayudar. ¿Cómo lo veís?
>

Eso  es por el GIL que te comentabamos en los primeros correos. La
asignación en una lista es un bytecode, por lo que se ejecuta de forma
atómica bloqueando todo. Pero no siempre. Si al borrar un objeto,
implica llamar a la funcion __del__ porque pierden todas las
referencias, la lista deja de ser atómica. Y esa atomicidad es por un
detalle de implementación del interprete actual y oficial, cosa que no
sería extrapolable a otras versiones de python no oficiales o futuras
(aunque parece que va a ser así por mucho tiempo).

Resumiendo: Ante la duda usa Queue o locks.

Un saludo:

Javi


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