hebras y forma de ejecutarlas

"Sergio Álvarez (xergio)" listas en xergio.net
Jue Mayo 11 12:20:10 CEST 2006



camontuyu wrote:
> 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()

no el start, sino TODO EL PROGRAMA. Supongi qe el programa tendrá una 
instancia... o será una función.

> except KeyboardInterrupt:
> 	print "salir"
> 	hebra.stop()
> 
> print "despues"
> 
> y efectivamente imprime
> 
> antes
> despues

el thread no tendrá un "sleep" no? porque sino hasta que no se termine 
el sleep, el thread no continuará y no pasará por la condición del STOP

> 
> 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�viles desde 1 c�ntimo por minuto. 
> http://es.voice.yahoo.com
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es

-- 
_______________________________________________
  Sergio Álvarez Muñoz
  León, Spain
_______________________________________________
  email: mail en xergio.net
   blog: http://xergio.net
     im: xergio en jabberland.com
_______________________________________________
  Sorry for my english, I know it's bad
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


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