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