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

Chema Cortes py en ch3m4.org
Mie Dic 21 02:11:25 CET 2011


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

El 21/12/11 00:47, gmail escribió:
> Gracias por la ayuda.
> 
> Al final me dí cuenta que creo que jamás conseguiré que el hilo detenga
> bien la función, me imagino que porque la función no estaba pensada para
> implementar hilos, tengo una nueva duda que creo que puede resolber el
> problema.
> 
> Si defino la función dentro del la función run de la clase del thread,
> podré obtener el valor de retorno?

Creo que deberías estudiar algo más sobre programación multihilo.
Necesitas algún modo de sincronizar los hilos, ya sea estableciendo
algún tipo de señal, o usando algún almacenaje intermedio que sirva para
comunicar hilos.

Como señal, en el módulo threading tienes Event. Se la pasas al hilo
contador al crearlo y haces que el hilo esté pendiente de los cambios en
el evento (en lugar de tener un bucle 'while 1', pones un 'while not
event.is_set()')

Por otro lado, el servidor debe comprobar si el hilo contador sigue
activo con is_active(). Si no va a hacer nada interesante, deberías
poner al servidor en espera a que termine el hilo contador con
wait(timeout) en vez de meterlo en un bucle sin fin.

Por último, faltaría tener un lugar para guardar el contador al que
puedan acceder los hilos. Como variable numérica, no deberías tener
problemas por ser su lectura/escritura una operación atómica. Pero en
casos más complejos necesitarías usar "locks" que pusieran orden en los
accesos a las variables, o bien utilizar algunas de las estructuras de
datos apropiadas como Queue o deque.

Tan sólo añadir que no deberías usar el KeyboardInterrupt para parar un
hilo, ya que nuncas vas a estar seguro de qué hilo recibirá la interrupción.

Espero que te sirvan estas pistas (te las he dicho de memoria). Si no te
aclaras, te pongo un ejemplo en cuanto tenga tiempo.


Saludos,
- -- 
Hyperreals *R: http://ch3m4.org/blog
Quarks, bits y otras criaturas infinitesimales
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJO8TI5AAoJEFdWyBWwhL4F2IMIAKuV6KYuo0yFIt0wT28SoPZ/
hxM2H3J4IU3kA+jGOCtfZM9mIgaFyuJ1A6H21jmSuRRnxZ8UcHjeUgQDnSLcCRv7
m7lxSbKTnJSiR0fQATDpsWUAXTnMDPjLfnpvh/xbs7xqb4cDGx2j2VMveRkbqgbm
6H1ptk1X1T1sVW53gpFxruVVWPvYzlm+IDwL8m+6cV6niZdflvGqjwOEqoiFHJKj
8ja4r2Nudql0r1a2fDQEwXzQltr9iKmadQ92AINXbxTGhboCjyAmP2RuLoikDfeb
8nmFWfmgbwv+Re9/P20NDmENz9TKxO/rBZhXIWI/NjsmBsKsE+MuPPPLK2Tyt1U=
=1hpb
-----END PGP SIGNATURE-----


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