Hilos

A continuación veremos ejemplos vistos en clases de hilos.


Los siguientes ejercicios basados en el tema Hilos, están sacados del video aportación por compañero de generaciones pasadas , a continuación se deja el video:

Ejercicio 1:

Código
import threading

#python 3.7

#python anaconda

import  time



def hola_mundo(nombre):



    print ('Hola mundo ' + nombre)

    for i in range(1,11,1):

        print i

        time.sleep(0.5)







if __name__ == '__main__':



    hilos = threading.Thread(target=hola_mundo('Alfredo'))

    hilos.start()

    #hilos.join()  #detiene el hilo hasta que se termine la ejecucion

    print ('Hola mundo desde el hilo principal')


Resultado

Ejercicio 2:

Código
import threading

import time

def hola_mundo(nombre):



    print("Hola Mundo "+nombre)

    time.sleep(5)



if __name__ == '__main__':

    thread = threading.Thread(target = hola_mundo,args = ("Alfredo",))

    thread.start()

    thread.join()





    print ("Hola Mundo desde el hilo principal")


Resultado

Ejercicio 3:

Código
import thread

import time

x = 0





#Uso basico de hilos en python

def contador():

    global x

    while True:

        print "Hilo secundario vivo"

        time.sleep(1)

        if x==1:

            break

    print "Se ha terminado la ejecucion del hilo"



def main():

    global x

    print "Hilo main iniciado"

    thread.start_new(contador,())

    x= input("Presione cualquier tecla para terminarla")

    print "Hilo main terminado"





main()


Resultado

Ejercicio 4:

Código
import threading

import time



def hilo_nombre(name):

    for i in range(0,10,1):

        print "\n",i, " ",name

        time.sleep(0.5)

    print "El hilo : " , name, "ha terminado"



def main():

    hilo1 = threading.Thread(target=hilo_nombre,args=("Hilo   Inicial",))



    hilo2 = threading.Thread(target= hilo_nombre,args=("Hilo siguiente",))

    hilo1.start() #iniciamos el hilo 1

    hilo1.join() #Despues de terminado el hilo 1

    hilo2.start() #inicia el hilo 2

    hilo2.join()#prosigue con las demas instrucciones

    print "Hilo principal terminado"





main()



"""

Un hilo no puede INICIARSE si su hilo padre (main) ha terminado

-Un hilo es independiente en funcionamiento de su hilo principal

-desmon: hilo que se sigue ejecutando despues de su hilo padre ha muerto

"""


Resultado

Ejemplo 5:
El siguiente ejemplo es complementación del video, lo podemos descargar en la descripción del video o en el siguiente link
Este ultimo ejemplo con hilos nos muestran imágenes que se despliegan aleatoriamente con sus respectivos sonidos, en el link dejado anteriormente se puede descargar las carpetas de los sonidos y de las imágenes.


Código
from Tkinter import *

from PIL import Image,ImageTk

import os

import random

import sys

import pygame

import time

import threading



carpeta=os.path.dirname(__file__)

fotos=carpeta+"/Imagenes/"

Sonidos=carpeta+"/Sonidos/"



#img=object

#sonido=object

#stop=object



def play():

    global fotos,img,label, label2,stop

    stop=0

    while stop==0:

        arreglo = ["Leon", "Gallo", "Jirafa", "Rana", "Panda", "Buho", "Elefante", "Tigre", "Lobo"]

        eleccion_aleatoria = str(arreglo.index(random.choice(arreglo)))



        figura = fotos + eleccion_aleatoria + ".png"

        imagen = Image.open(figura)

        imagen.thumbnail((500, 500), Image.ANTIALIAS)

        img = ImageTk.PhotoImage(imagen)

        label.config(image=img)

        label2.config(text=arreglo[int(eleccion_aleatoria)])

        # Para Reproducir sonido

        sonido = Sonidos + eleccion_aleatoria + ".mp3"  # obtengo la ruta del sonido correspondiente

        pygame.mixer.music.load(sonido)  # Abre el archivo

        pygame.mixer.music.play()  # Reproduce sonido

        time.sleep(2)

    print "Hilo terminado"





def stop():

    global stop

    print stop

    stop=1

"""

def play():

   

"""

pygame.init()  # inicializa el modulo de sonido de pygame

root = Tk()

root.geometry("200x200")

label = Label(root)

label.pack()

label2 = Label(root, text="", font=("Arial", 12, "bold"))

label2.pack()

btn1=Button(root,text="Iniciar",command=play).pack(fill=X)

btn2=Button(root,text="Terminar", command=stop).pack(fill=X)

hilo = threading.Thread(target=play)

hilo.start()

root.mainloop()


Resultado

Comentarios

Entradas más populares de este blog

Ejercicios en PyCharm

1.1 Aplicaciones gráficas por computadora.

Ensayo de lenguaje ensamblador