Foros del Web » Programando para Internet » Python »

threadsPython

Estas en el tema de threadsPython en el foro de Python en Foros del Web. Buenas tengo un código que realiza la acción de listar el sistema y tiene una barra de progreso la cual esta conectada a esta acción... ...
  #1 (permalink)  
Antiguo 16/11/2011, 09:30
 
Fecha de Ingreso: octubre-2011
Mensajes: 31
Antigüedad: 13 años, 1 mes
Puntos: 7
threadsPython

Buenas tengo un código que realiza la acción de listar el sistema y tiene una barra de progreso la cual esta conectada a esta acción... pero al momento de ejecutarlo se queda guindada la GUI, lo cual no hace con una acciones mas pequeñas como generar números... si alguien me puede ayudar muchas gracias :D...

Código Python:
Ver original
  1. #!/urs/bin/env python
  2.  
  3. import pygtk, gtk
  4. import gobject
  5. import os
  6. gobject.threads_init()
  7.  
  8. class Timer():
  9.     def __init__(self):
  10.         self.g = 0
  11.         self.Win()
  12.    
  13.     def start_t(self, widget):
  14.         self.g = gobject.timeout_add(100 , self.count)
  15.    
  16.     def count(self):       
  17.         self.systema = os.system('ls -R /')
  18.         self.pbar.pulse()
  19.         return True
  20.        
  21.     def Win(self):
  22.         self.win = gtk.Window()
  23.         self.win.set_size_request(500, 50)
  24.         self.win.connect("destroy", lambda q: gtk.main_quit())
  25.         self.box1 = gtk.HBox()
  26.         self.win.add(self.box1)
  27.         self.box1.show()
  28.        
  29.         self.label = gtk.Label("Listar Sistema")
  30.         self.box1.pack_start(self.label)
  31.         self.label.show()
  32.        
  33.         self.button1 = gtk.Button("aceptar")
  34.         self.box1.pack_start(self.button1)
  35.         self.button1.show()
  36.         self.button1.connect("clicked",self.start_t)
  37.        
  38.         self.pbar = gtk.ProgressBar()
  39.         self.box1.pack_start(self.pbar)
  40.         self.pbar.show()
  41.        
  42.         self.win.show()
  43.                
  44. def main():
  45.     gtk.main()
  46.    
  47. if __name__=="__main__":
  48.     window = Timer()
  49.     main()
  #2 (permalink)  
Antiguo 16/11/2011, 09:53
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: threadsPython

Tal como viene en el titulo tienes que usar threads.

Por cierto no veo cual es tu pregunta. Pero supongo que es acerca de threads puedes empezar por el modulo Threading.
  #3 (permalink)  
Antiguo 16/11/2011, 10:01
 
Fecha de Ingreso: octubre-2011
Mensajes: 31
Antigüedad: 13 años, 1 mes
Puntos: 7
Respuesta: threadsPython

mi pregunta es que no puedo hacer que la barra de progreso se mueva.. con la acción que se esta realizando ... cuando termina de realizar la acción 'ls -R /' es que se mueve un solo espacio... como aria para que mientras se este realizando la acción la barra de progreso este en movimiento....
  #4 (permalink)  
Antiguo 16/11/2011, 10:38
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: threadsPython

Es por 2 razones:

1.- El thread principal se bloquea cuando estas haciendo una operación muy larga.
2.- self.pbar.pulse() debería de ir antes de tu proceso largo.
  #5 (permalink)  
Antiguo 16/11/2011, 12:53
 
Fecha de Ingreso: octubre-2011
Mensajes: 31
Antigüedad: 13 años, 1 mes
Puntos: 7
Respuesta: threadsPython

claro entiendo al estar primero self.pbar.pulse() se ejecuta primero.. y la barra de progreso se activa... pero por el return True la otra acción no se realiza... :s y si lo coloco al final la acción 'ls -R /' la hace infinita :S
  #6 (permalink)  
Antiguo 16/11/2011, 15:22
 
Fecha de Ingreso: octubre-2011
Mensajes: 31
Antigüedad: 13 años, 1 mes
Puntos: 7
Respuesta: threadsPython

buenas amigo muchas gracias de todos modos ya logre resolver lo de los hilos :D ejejejjej ... gracias deberás sus respuestas fueron de mucha ayuda ejejeejj ya no se congela :D aunque me falta conectar la barra de progreso pero gracias...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:42.