elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Hilos en python algo que no entiendo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Hilos en python algo que no entiendo  (Leído 3,117 veces)
eliander20

Desconectado Desconectado

Mensajes: 30


Ver Perfil
Hilos en python algo que no entiendo
« en: 20 Mayo 2017, 23:47 pm »

Hola tengo un problema con los threads o hilos en python, y es que no se, si es que no entiendo bien de que se trata o si mi codigo esta mal.

El problema viene en lo siguiente y es que he estado viendo codigo fuente de programas que tienen daemons osea la funcion set.Daemon(True), bien entiendo que esto es para darle un valor true para cuando cerremos el programa el proceso se cierre correctamente, pero si no es daemon el proceso se queda o no se cierra correctamente.

Bien eso lo entiendo pero hago un codigo de esta manera:
Código
  1. import threading
  2.  
  3. def hola():
  4.        while True:
  5.                print "Hola!"
  6.  
  7. def adios():
  8.        while True:
  9.                print "Adios!"
  10.  
  11. t = threading.Thread(target=hola)
  12. t.setDaemon(True)
  13. t.start()
  14.  
  15. t2 = threading.Thread(target=adios)
  16. t2.setDaemon(True)
  17. t2.start()
  18.  
  19.  

Bien pero mi duda radica en lo siguiente tengo dos hilos pero si se fijan cada funcion target de cada hilo tiene un while True, pero entonces a la hora de ejecutar el script solo ejecuta una vez Hola Hola Hola varias veces y Adios Adios Adios varias veces dejango una salida mas o menos asi

Hola!
Hola!
Hola!
Hola!
Hola!
Hola!
Hola!
Hola!
Adios!
Adios!
Adios!
Adios!
Adios!
Adios!
Adios!
 
Y se cierra solo, osea el script se detiene solo y no se siguen ejecutando los hilos o Threads y a veces solo hace una salida asi solo con "Hola!"


Hola!
Hola!
Hola!
Hola!
Hola!
Hola!


« Última modificación: 21 Mayo 2017, 01:38 am por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: Hilos en python algo que no entiendo
« Respuesta #1 en: 21 Mayo 2017, 01:44 am »

set.Daemon(True), bien entiendo que esto es para darle un valor true para cuando cerremos el programa el proceso se cierre correctamente, pero si no es daemon el proceso se queda o no se cierra correctamente.

No. No parece ser exactamente eso.

A thread can be flagged as a “daemon thread”. The significance of this flag is that the entire Python program exits when only daemon threads are left. The initial value is inherited from the creating thread. The flag can be set through the daemon property.

Como ahí indican, marcar un thread con el flag "daemon" ( Thread.setDaemon(True) ) sirve para volver el thread a un estado no bloqueante, y así permitir que la ejecución de la aplicación termine, aunque el thread esté activo. Por ende, si solo tienes threads "daemónicos" activos en tu código, entonces la ejecución de los threads será "abortada" para finalizar la ejecución al llegar a la última instrucción de tu código.

Bien pero mi duda radica en lo siguiente tengo dos hilos pero si se fijan cada funcion target de cada hilo tiene un while True, pero entonces a la hora de ejecutar el script solo ejecuta una vez Hola Hola Hola varias veces y Adios Adios Adios varias veces dejango una salida mas o menos asi

En teoría el while no importa en este caso puesto que solo tienes threads "daemónicos", por ende no se vuelven "búcles infinitos"; sino que al llegar a la última instrucción de tu programa, se aborta la ejecución de los threads "daemónicos", y por consiguiente, la aplicación termina su ejecución. Si tuvieras un thread adicional normal y corriente, entonces los dos threads "daemónicos" de tu código no se detendrían.

el script se detiene solo y no se siguen ejecutando los hilos o Threads

Precisamente por eso, por que son "daemonic" threads. Arriba en la cita de la documentación oficial de Python explican el por qué sucede ese comportamiento, aparte de lo que yo he intentado explicar de forma adicional.



En fin. No sé si me he explicado de la mejor forma ya que no uso mucho Python, pero, ¿has entendido cual es el origen del problema?.

PD: No sé si en Español se les llamará hilos "daemónicos", como ya digo no uso mucho Python, simplemente me pareció una buena traducción literal del Inglés.

¡Saludos!


« Última modificación: 21 Mayo 2017, 02:21 am por Eleкtro » En línea



tincopasan


Desconectado Desconectado

Mensajes: 1.286

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: Hilos en python algo que no entiendo
« Respuesta #2 en: 21 Mayo 2017, 04:44 am »

no entiendo bien que quieres hacer , pero una de las cosas, supongo es que quieres imprimir indefinidamente dos mensajes(hola y adios) y de forma alternada, te muestro una posible forma de hacerlo.Con respecto a daemon, no sé que crees o esperas que haga.
Código
  1. import threading
  2. import time
  3.  
  4. def saludo(mensaje):
  5.    while True:
  6.        print (mensaje)
  7.        time.sleep(1)
  8.  
  9. def main():
  10.    mensaje="Hola"
  11.    mensaje1="Adios"
  12.    t = threading.Thread(target=saludo,args=(mensaje,))
  13.    t1 = threading.Thread(target=saludo,args=(mensaje1,))
  14.    t.start()
  15.    t1.start()      
  16.    y=input("Presione Enter para terminar...")
  17.  
  18. main()
  19.  
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
hilos en python que tardan mucho
Scripting
lovita 3 2,773 Último mensaje 14 Marzo 2008, 23:44 pm
por Ragnarok
Delegados en hilos... algo raro « 1 2 »
.NET (C#, VB.NET, ASP)
Zzombi 10 11,106 Último mensaje 7 Diciembre 2009, 00:03 am
por [D4N93R]
Hay algo que no entiendo muy bien sobre OOP « 1 2 »
Programación General
mark182 11 5,835 Último mensaje 13 Junio 2010, 06:32 am
por TeKNo dUKe
[PYTHON] Hilos « 1 2 »
Scripting
EvilGoblin 12 8,981 Último mensaje 14 Julio 2010, 22:45 pm
por EvilGoblin
Problema con python, multi-hilos y mysql
Scripting
zagk 0 2,414 Último mensaje 29 Junio 2017, 22:46 pm
por zagk
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines