Python kill thread

Iniciado por nikther, 9 Mayo 2012, 15:44 PM

0 Miembros y 1 Visitante están viendo este tema.

nikther

Hola gente , no soy uno de los que preguntan en los foros, soy mas de buscar en google y los libros, pero estoy desesperado, nececito a algun maestro en python que me de un ostia y enceña que es lo que pasa con los modulos thread, y threading

Mi problema principal, es que intendi bien como crear varios procesos, pero mi problemas existen cuando quiero matarlos, 
durante semanas buscava una manera decente pero no encuentro.

La cuestion es que se como matar un proceso desde dentro, por ejemplo tenemos un bucle while y dentro de ell una condicion que si se cumple mata el proceso mediante exit.

Esto lo tengo pillado, pero si el procesos, es un bucle que no puedo modificar por ejemlo una ventana grafica de Tkinter, funcion mainloop() que tiene su propio bucle, como llamar la function thread.exit() desde tkinter.mainloop() sin agregar un boton con esta funcion a la GUI?

Etoy desarollando un bot para juego, en una apuesta con amigo El = Java yo Python y queien llega primero se lleva el reino.
P.S: Tener cuidado al jugar con threads no por nada Les pusieron una variable Deamon, colge por minimo 10 veces el linux, y win7 unos 40 mientras buscava respuestas >:D.

nikther

#1
Bueno gente por duda, voy explicar a lo que llege volviendo a leer los doc de python, quisa encontre una respuesta a mi pregunta pero no me convence si alguien save otra, estare mas que encantado escucharla.

en si un Thread lo que hace es abrir un nuvo proceso en nuestro equipo, por lo que tuve que cancelar una lista enorme de pythonw.exe ejecutados en mi win7.

la funcion thread.exit() no es nada mas que una exepcion que se crea y obliga ha cerarce el proceso en modo silencioso.

Saliendo de etos factos, y de lo que en documentacion licita de desarolladores no se prezenta ninguna evidencia de como cerrar un proceso, sin previamente no definirlo como una instancia con una funcion que crea la exepcion, la manera de matar un hilo en ejecucion seria matandolo usando el recurso de sistema, al momento no quiero profundizar en este sentido, ya que tampoco me atrevo por el tiempo, pero ya vere a este demonio en futuro no muy lejano. Pero se ve que en esto pensaron los creadores y dejaro funcion para obtener la id de hilo que para este cometido viene muy a mano.

Conclusiones, maneras de prever una finalizacion de un thread antes de ejecutarlo:
como ya lo de cia antes  con una condicion en bucle que se va ejecutar:
Código (python) [Seleccionar]
x = False
def bucle():
while True:
 if x:
  try:#por si acaso nunca esta demas, al no ser que nececitamos aquellos pocos ciclos que ocupa
   thread.exit()
  except:
   printe "un error al acavar el proceso hijo"
 #el codigo que quieremos poner
thread.start_new(bucle, ())

Para acavar el proceso lo unico que hace falta es cambiar la x=True y esperar su siguente ejecucion.
bueno de este metodos. como el threading.Thread y el viejo thread crearian una exepcion "SystemExit"



Elektro H@cker: usa el botón "insertar código"