El día 2 de julio de 2012 04:05, jose villalba cortazzo <josemariavillalbacorta...@hotmail.com> escribió: > Gente como puedo hacer para matar a los hilos socketudp y socketcp para que > el programa se cierre solo y libere los recursos que esta utilizando. > El programa es un cliente p2p que envía mensajes y transfiere archivos a > otros clientes. > Al arrancar el sistema hay que especificar el puerto por donde va a escuchar > conexiones TCP y modificar la dirección de broadcast por la de su red para > probarlo. > Estoy estudiando socket.
Podías explicar un poco qué es lo que te pasa. Por experiencia, supongo que los sockets no muestran los mensajes de cierre y se te queda todo colgado. El hilo principal no puede terminar porqué todavía tiene hijos en activo, y los hijos están bloqueados porque el padre no suelta el control. Soluciones: 1) haz que los hijos sean "daemons". De este modo, cuando el padre termina, los hijos se interrumpen. El incoveniente es que los hijos no acaban bien. def __init__(self, puerto, cerrar): threading.Thread.__init__(self) self.daemon=True 2) Haz que el padre espere a que terminen los hijos. except KeyboardInterrupt: cola.put(salir) cerrar.put('OK') socketcp.join() socketudp.join() break 3) Cuando hay muchos hijos, resulta más práctico esperar a que los queues se haya vaciado: except KeyboardInterrupt: cola.put(salir) cerrar.put('OK') cola.join() cerrar.join() break Pero hace falta que en cada get tenga emparejado un task_done para indicar que ha terminado el procesado del dato extraído: while True: salir = cola.get() ... cola.task_done() Aunque no uses este método, haz siempre el task_done() al finalizar el procesado. -- Hyperreals *R: http://ch3m4.org/blog Quarks, bits y otras criaturas infinitesimales _______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/