Práctica 5 Lectura Exclusiva/Escritura Exclusiva

#Practica 5 Suma EREW
#Noe Jimenez Peñaloza

import threading
import math

#Definicion de Funciones
def hilo(i,j):
if ((2*j)%(2**i)==0):
a[int(2*j)]=a[int(2*j)]+a[int((2*j)-2**(i-1))]
print a

#Programa principal
a=[0,7,1,3,1,2,1,8,4]
n=len(a)
lg=int(math.log(n,2))
print a
i=1
while(i<=lg):
j=1
while(j<=(n/2)):
t=threading.Thread(target=hilo, args=(i,j, ))
t.start()
j=j+1
i=i+1

Anuncios

Programación de Hilos en Python

En python, los threads  se realizan a través del módulo threading (basado en el módulo mas prehistórico thread), y consiste en ir expandiendo la clase para añadir threads.

import threading

class hilo(threading.Thread):

           #el constructor no hace falta especificarlo ya que la clase lo hace por nosotros.

           def __init__(self): 

                   threading.Thread.__init__(self)

           def run(self):

                   while True:

                          print “se esta ejecutando el hilo1”

           #el método run es donde se debe introducir el código que se ejecuta en segundo plano.

 

class hilo2(threading.Thread):

             def run(self):

                    while True:

                           print “se esta ejecutando el hilo2”

Una vez que hemos creado los hilos como en este ejemplo, para ejecutarlos se haría de la siguiente forma:

mi_hilo1=hilo()

mi_hilo2=hilo2()

mi_hilo1.start()

mi_hilo2.start()

De esta forma conseguiríamos ejecutar dos “while True” al mismo tiempo, otra cosa que hay que explicar, es que cuando creamos un hilo, aparte de existir el método “start” para iniciar el hilo también existe el método “join”, con este método se consigue bloquear la ejecución normal del programa hasta que termine el hilo, ejemplo:

class hilo(threading.Thread):

         def run(self):

                   mensaje=raw_input(“escribe algo “)

mi_hilo=hilo()

mi_hilo.start()

mi_hilo.join()

print “se a cerrado el hilo”
raw_input()

En este caso hasta que no se escriba algo para terminar el hilo, no continuaría el programa.

También podemos crear un hilo a través de una función ya creada:

def suma(a, b):

          while True:

                a+=1

                b+=1

                print a+b

hilo=threading.Thread(target=suma, args=(5, 8))

hilo.start()

while True:

        print “este es el hilo principal del programa”

En este caso creamos a través de la función suma un hilo, lo único que creo que debería explicar, es que se usa la palabra reservada target para indicar la función que se va a ejecutar en el thread, y la palabra reservada args  que sirve para pasarle los argumentos a la función dentro de una tupla.