Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/08/2010, 13:38
theteam
 
Fecha de Ingreso: febrero-2010
Mensajes: 10
Antigüedad: 14 años, 10 meses
Puntos: 0
[Resuelto] problema con hilos (malditos hilos en python xD)

el tema es asi, necesito que un hilo se inicie y se pare en diversas partes del programa. como deben saber python no tiene un buen manejo de hilos (por lo que lei por toda internet) con lo que por ejemplo no se puede parar un hilo desde fuera del hilo.
al parar el hilo (con un bucle como lei en varios lados) y al volverlo a iniciar, me tira un error diciendo de que el hilo ya esta iniciado, incluso poniendole un if not hilo.isAlive()

aca un codigo simplificado:
Código:
import sys
import os
import threading, time

class MainWindow():
    
    def __init__(self):
        # t es un hilo
        self.t = threading.Thread(target=self.hilo)
        #como python no brinda una forma de parar ciclos desde afuera necesitamos una variable :S, pero bueh
        self.parar=True
        print "creo hilo por primera vez"
        self.crearHilo()
        print "creo un hilo sin parar el anterior"
        self.crearHilo()
        print "paro el hilo, espero 5 seg y vuelvo a crear"
        self.parar=True
        time.sleep(5)
        self.crearHilo()
    
    def crearHilo(self):
        if self.t.isAlive():
            print "hilo activo, no inicio"
        else:
            self.parar=False
            print "hilo desactivado, inicio"
            self.t.start()
    
    def hilo(self):
        while (not self.parar):
            print "se esta ejecutando el hilo"
            time.sleep(2)
        return

if __name__ == "__main__":
    oa=MainWindow()
me imprime esto la consola cuando lo ejecuto:
Código:
creo hilo por primera vez
hilo desactivado, inicio
se esta ejecutando el hilo
 creo un hilo sin parar el anterior
hilo activo, no inicio
paro el hilo, espero 3 seg y vuelvo a crear
hilo desactivado, inicio
Traceback (most recent call last):
  File "__init__.py", line 38, in <module>
    oa=MainWindow()
  File "__init__.py", line 21, in __init__
    self.crearHilo()
  File "__init__.py", line 29, in crearHilo
    self.t.start()
  File "/usr/lib/python2.6/threading.py", line 467, in start
    raise RuntimeError("thread already started")
RuntimeError: thread already started
alguno sabe por que?
desde ya muchas gracias

Última edición por theteam; 08/08/2010 a las 12:18