Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- """
- Para aprender un poco más sobre el uso de 'Generadores' en Python, encontré
- este excelente video creado por 'Corey Schafer'
- < https://www.youtube.com/watch?v=bD05uGo_sVI >
- "Tutorial de Python: Generadores - Como usarlos y los beneficios
- que obtienes"
- El código esta escrito para 'python2.X', así que buscando, encontré el
- código original en:
- https://github.com/CoreyMSchafer/code_snippets/blob/master/Generators/people.py
- y, basado en las respuestas a esta pregunta:
- https://stackoverflow.com/questions/41191412/no-module-named-mem-profile
- Hice las siguientes modificaciones para ejecutar el código en 'Python 3.8'
- =========================
- 1. Instalar el módulo < memory_profiler >
- $ pip3 install memory_profiler
- ...
- $ sudo updatedb
- ...
- 2. Cambios en el còdigo
- * agregar '( )' a los print
- * usar 'mem_profile.memory_usage()' en los print
- * usar 'range' en lugar de 'xrange' en el bucle 'for'
- * usar 'time.time()' para medir los tiempos 't1' y 't2'
- Con el módulo < memory_profiler >, instalado:
- * 'import memory_profiler as mem_profile'
- Hechos los cambios, el código funciona en 'Python 3.8'
- El primer método, 'listando el generador', tiene un gran impacto en
- la memoria, utiliza unos [270.8828125]Mb para almacenar el objeto
- 'lista' solicitado.
- Si miramos los tiempos, emplea [0.9230213165283203]segs más que el
- segundo método 'solo con el generador', el impacto del segundo método
- en la memoria, es prácticamente nulo.
- Los datos aquí expuestos pueden variar dependiendo de las características
- de máquina y la arquitectura (32bits / 64 bits) de la misma, en que se
- ejecute el código
- En los dos casos, se prueba para un rango de 1 millón de datos.
- Con el código 'adaptado', vamos al análisis
- """
- import memory_profiler as mem_profile
- import random
- import time
- names = ['John', 'Corey', 'Adam', 'Steve', 'Rick', 'Thomas']
- majors = ['Math', 'Engineering', 'CompSci', 'Arts', 'Business']
- print('Memory (Before): {}Mb'.format(mem_profile.memory_usage()))
- def people_list(num_people):
- result = []
- for i in range(num_people):
- person = {
- 'id': i,
- 'name': random.choice(names),
- 'major': random.choice(majors)
- }
- result.append(person)
- return result
- def people_generator(num_people):
- for i in range(num_people):
- person = {
- 'id': i,
- 'name': random.choice(names),
- 'major': random.choice(majors)
- }
- yield person
- # Elimine los '#' para ejecutar este código, 'listando el generador'
- # t1 = time.time()
- # people = people_list(1000000)
- # t2 = time.time()
- """
- Resultado listando el generador
- =================================
- Memory (Before): [43.78125]Mb
- Memory (After) : [314.6640625]Mb
- Took 0.9230234622955322 Seconds
- =================================
- """
- # Elimine los '#' para ejecutar este código, 'solo con el generador'
- # t1 = time.time()
- # people = people_generator(1000000)
- # t2 = time.time()
- """
- Resultado solo con el generador
- =================================
- Memory (Before): [43.75]Mb
- Memory (After) : [43.75]Mb
- Took 2.1457672119140625e-06 Seconds
- =================================
- """
- print('Memory (After) : {}Mb'.format(mem_profile.memory_usage()))
- print('Took {} Seconds'.format(t2 - t1))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement