Ver Mensaje Individual
  #3 (permalink)  
Antiguo 07/08/2010, 18:03
theteam
 
Fecha de Ingreso: febrero-2010
Mensajes: 10
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: problema con hilos (malditos hilos en python xD)

vos decis que no se puede iniciar y parar un hilo cuantas veces quiera por mas que siempre mantenga solo una iniciacion del hilo a la vez? (fijate que yo paro el hilo y cuando el hilo ya finalizo lo vuelvo a iniciar)
en caso de que lo anterior sea afirmativo, crear varios hilos para esto, no seria ineficiente? o cuando termina un hilo no queda en memoria?

probe este codigo y anda, pero me gustaria que no queden hilos colgados en memoria:
(lo que hago es antes de hacer hilo.start(), hago: hilo=threading.Thread(target=self.hilo)
Código Python:
Ver original
  1. class MainWindow():
  2.    
  3.     def __init__(self):
  4.         # t es un hilo
  5.         self.t = threading.Thread(target=self.hilo)
  6.         #como python no brinda una forma de parar ciclos desde afuera necesitamos una variable :S, pero bueh
  7.         self.parar=True
  8.         print "creo hilo por primera vez"
  9.         self.crearHilo()
  10.         print "creo un hilo sin parar el anterior"
  11.         self.crearHilo()
  12.         print "paro el hilo, espero 5 seg y vuelvo a crear"
  13.         self.parar=True
  14.         time.sleep(10)
  15.         self.crearHilo()
  16.    
  17.     def crearHilo(self):
  18.         if self.t.isAlive():
  19.             print "hilo activo, no inicio"
  20.         else:
  21.             self.parar=False
  22.             print "hilo desactivado, inicio"
  23.             # t es un hilo
  24.             self.t = threading.Thread(target=self.hilo)
  25.             self.t.start()
  26.    
  27.     def hilo(self):
  28.         while (not self.parar):
  29.             print "se esta ejecutando el hilo"
  30.             time.sleep(2)
  31.         print "se esta acabando el hilo"
  32.         return
  33.  
  34. if __name__ == "__main__":
  35.     oa=MainWindow()


en cuanto a la forma de implementar hilos, tanto heredando de threads (como me propusiste vos) como haciendo como hago yo, tengo entendido que es lo mismo, o por lo menos es valido hacerlo de las dos formas.
se que para el ejemplo que puse es trivial los hilos, pero lo simplifique para no enredarme con otras cosas y centrarme en el problema de los hilos y para que ustedes entiendan el codigo sin tener que leer mucho codigo.

gracias por responder!!