es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Diferente tamaño de conjunto de residentes utilizado al ejecutar código de Python en IPython frente a un script

Estoy tratando de obtener la memoria ocupada por un fragmento de código. Mientras que al ejecutarlo mediante un script siempre da la misma salida, al ejecutarlo desde la terminal de iPython da resultados diferentes cada vez que lo intento. También he intentado con un proceso separado y sigue siendo lo mismo.

Script:

> cat /var/tmp/mem1.py
def a(): 
    import os, psutil<br>
    process = psutil.Process(os.getpid())<br>
    before = process.memory<em>info().rss 
    a = [10]*100000 
    after = process.memory</em>info().rss 
    print(before, after, after-before) 

a()
> python /var/tmp/mem1.py
10035200 10838016 802816
> python /var/tmp/mem1.py
10039296 10842112 802816
> python /var/tmp/mem1.py
10039296 10842112 802816

Desde la terminal de iPython:

In [1]: def a(): 
   ...:     import os, psutil<br>
   ...:     process = psutil.Process(os.getpid())<br>
   ...:     before = process.memory<em>info().rss 
   ...:     a = [10]*100000 
   ...:     after = process.memory</em>info().rss 
   ...:     print(before, after, after-before) 
   ...:                                                                                                                                                                                                 

In [2]: from multiprocessing import Process                                                                                                                                                             

In [3]: p = Process(target=a); p.start(); p.join();
48271360 49057792 786432

In [4]: p = Process(target=a); p.start(); p.join();
48267264 49053696 786432

In [5]: p = Process(target=a); p.start(); p.join();
48279552 49033216 753664

In [6]: p = Process(target=a); p.start(); p.join();
48275456 49041408 765952

¿Alguien puede ayudarme a entender por qué estoy viendo este comportamiento en iPython?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Las discrepancias en los resultados del uso de memoria obtenidos al ejecutar el mismo script desde un terminal de IPython podrían deberse al hecho de que IPython mismo utiliza memoria adicional en comparación con la ejecución del script directamente desde la línea de comandos. Esto podría ser debido a la carga adicional de ejecutar el kernel de IPython u otros factores como el cacheo e inicialización de módulos. Además, el módulo de multiprocessing utilizado en el terminal de IPython también podría contribuir a las variaciones en el uso de memoria, ya que implica la creación de procesos separados, lo que podría resultar en diferentes asignaciones de memoria dependiendo de los recursos del sistema disponibles en el momento de la ejecución. Para obtener resultados más consistentes, podría ser útil ejecutar el script fuera de un terminal de IPython y tratar de minimizar cualquier factor externo que pueda afectar las mediciones del uso de memoria.

Comments are closed.