hebras y forma de ejecutarlas

camontuyu camontuyu en yahoo.es
Jue Mayo 11 12:02:25 CEST 2006


El jue, 11-05-2006 a las 09:18 +0200, "Sergio 脕lvarez (xergio)"
escribi贸:
> camontuyu wrote:
> > Hola a todos,
> > tengo el siguiente problema con las hebras.
> > 
> > Tengo un modulo main que llama a un objeto que hereda de una thread,
> > seria algo as铆
> > 
> > class B(threading.Thread)
> > 	def __init__(...)
> > 		self._stop = threading.Event()
> > 
> > 	def run(self):
> > 		self._stop.clear()
> > 		while(not self._stop.isSet()):
> > 			hace cosas
> > 
> > 
> > modulo main...
> > 	b = B()
> > 	b.start()
> > 
> > 
> > Actualamente el programa ejecuta sus cosas en el while, mientre que
> > imprime por consola los resultados. El problema es cuando terminar la
> > ejecuci贸n de B, por ejemplo con un Control+C. No recibe ninguna se帽al,
> > ya que el la metodo main ha terminado, pero la hebra sigue en
> > funcionamiento.
> 
> Yo he tenido tu mismo problema, no s茅 c贸mo terminar la ejecuci贸n del 
> thread. PEro me hice esto: arranco la aplicaci贸n y la meto dentro de un 
> try:, y luego esto:
> 
>      except KeyboardInterrupt:
>          hilo.stop()
> 
> Eso cuando pulso control+c llama a hilo.stop(), y el hilo es lo siguiente:
> 
> class MiHilo(threading.Thread):
>      def __init__(self):
>          threading.Thread.__init__(self)
>          self._stp = False
> 
>      def run(self):
>          while not self._stp:
>              [... trabaja con lo que sea ...]
> 
>      def stop(self):
>          self._stp = True
> 
> Si alguien sabe una forma mejor... porque yo al menos he mirado si hay 
> alg煤n kill para los threads y no he visto nada.
> 
> > 
> > Como termino la ejecuci贸n, parandome en el main con un bucle hasta
> > recibir un control+c y luego enviar a B una se帽al de terminar???
> > 
> > Ten铆a pensado cuando est茅 lista la funcionalidad hacerle una interfaz
> > gr谩fica con PyGTK pero no se si est谩 ser谩 la mejor soluci贸n.
> > 
> > Alguna sugerencia de como tratar este c贸digo??
> > 
> > Un Saludo.

Hola, lo he intentando como has dicho, pero no va.

en el main he puesto

print "antes"
try:
	hebra.start()
except KeyboardInterrupt:
	print "salir"
	hebra.stop()

print "despues"

y efectivamente imprime

antes
despues

mientras la hebra sigue en funcionamiento, por eso dec铆a de incluir un
while 'infinito' que espere a se pulse control+c u otra cosa...

Gracias haber si conseguimos algo guapo. :D

Saludos


		
______________________________________________ 
LLama Gratis a cualquier PC del Mundo. 
Llamadas a fijos y m髒iles desde 1 c閚timo por minuto. 
http://es.voice.yahoo.com
------------ pr贸xima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


M醩 informaci髇 sobre la lista de distribuci髇 Python-es