Advertisement
MiguelazoDS

Untitled

Sep 11th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.30 KB | None | 0 0
  1. import random
  2. import sys
  3. import time
  4. from multiprocessing import Process, Queue
  5. random.seed()
  6.  
  7. #crea una lista con valores entre 0 y 10 (enteros)
  8. #devuelve la lista de enteros
  9. def genList (size):
  10.     randomList = []
  11.     for i in range(size):
  12.         randomList.append(random.randint(0,10))
  13.     return randomList
  14.  
  15. #calcula la suma acumulada de todos lo valores de la lista
  16. def sumList(inList):
  17.     finalSum = 0
  18.     for value in inList:
  19.         finalSum = finalSum + value
  20.     return finalSum
  21.  
  22. #crea una lista, suma los valores de la lista y coloca el resultado en una cola
  23. def doWork(N,q):
  24.     #crea una lista de enteros aleatorios
  25.     myList = genList (N)
  26.     #suma los valores de la lista generadas
  27.     finalSum = sumList(myList)
  28.     # guarda el resultado en la cola (Compartida por demas procesos)
  29.     q.put(finalSum)
  30.  
  31. if __name__ == '__main__':
  32.  
  33.   if len(sys.argv) == 2 and sys.argv[1].isdigit():
  34.  
  35.     N = int(sys.argv[1]) #argumento convertido en entero
  36.     startTime = time.time() #tiempo de inicio
  37.     q = Queue() # cola para compartir resultados
  38.  
  39.     #defino cantidad de procesos que se corren
  40.     num_process = 4
  41.  
  42.     # creo nombres para procesos
  43.     nameProcess = []
  44.     for i in range(0,num_process):
  45.       nameProcess.append("p" + str(i+1)) #arranca de 1 a 4
  46.  
  47.     lenProcess = len(nameProcess)
  48.  
  49.     # for i in range(0,lenProcess):
  50.     # print (nameProcess[i])
  51.  
  52.     # defino procesos
  53.     for i in range(0,lenProcess):
  54.       #// división entera
  55.       nameProcess[i]= Process(target=doWork, args=(N//num_process,q))
  56.       nameProcess[i].start()
  57.  
  58.     results = []
  59.     # reservo lugares en el array uno por cada proceso
  60.     for i in range(0,lenProcess):
  61.       #set block=True para bloquea la asignacion hasta que el resultado este disponible en la cola
  62.       results.append(q.get(True))
  63.  
  64.     #sum the partial results to get the final result
  65.     finalSum = sumList(results)
  66.  
  67.     #join para cada proceso
  68.     for i in range(0,lenProcess):
  69.       nameProcess[i].join()
  70.  
  71.     endTime = time.time() #obtener el tiempo de finalizado
  72.     workTime =  endTime - startTime #calculo del tiempo para completar el trabajo
  73.  
  74.     #imprimo resultados
  75.     print ("Tiempo total " + str(workTime) + " segundos")
  76.     print ("Suma del resultado final: " + str(finalSum) )
  77.  
  78.   else:
  79.     exit(-1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement