Путаница в Python Управление памятью - PullRequest
1 голос
/ 14 марта 2020

Фон : Иногда я неоднократно запускаю одну и ту же ячейку на ноутбуке Jupyter для построения графиков, и это приводит к ядру d ie. Я подозреваю, что это связано с проблемой памяти. Поэтому я делаю следующий тест.

import gc
import numpy as np
import matplotlib.pyplot as plt

def my_func():
    x = np.arange(0, 10)
    plt.plot(x, x)
    plt.show()

collected = gc.collect()
print(f"Garbage collector: collected {collected} objects")

print("Creating cycles...")
my_func()

collected = gc.collect()

print(f"Garbage collector: collected {collected} objects")


Запуск на ноутбуке Jupyter

Garbage collector: collected 51 objects
Creating cycles...
Garbage collector: collected 2250 objects

Но когда я снова запускаю ноутбук (без перезапуска ядра),

Garbage collector: collected 2290 objects
Creating cycles...
Garbage collector: collected 0 objects


Работа на Python Переводчик

Garbage collector: collected 9 objects
Creating cycles...
Garbage collector: collected 0 objects


Похоже, когда я запускаю скрипт на Python Интерпретатор, объект фигуры автоматически освобождается после того, как он покидает my_func. Но это не относится к ноутбуку Jupyter. Кто-нибудь может объяснить разницу? Спасибо

1 Ответ

0 голосов
/ 14 марта 2020

jupyter notebook использует I Python Kernel , и после запуска вашей ячейки все переменные, собранные во время выполнения ячейки, сохраняются в памяти, в этом и заключается смысл использования jupyter в качестве интерактивного интерпретатор, если вы хотите освободить память для ноутбука Jupyter, вы можете перезапустить ядро ​​


Я тестировал ваш пример на ноутбуке Jupyter, снова и снова выполняя одну и ту же ячейку, и я не делал смотрите описанное вами поведение после каждого повторного запуска одной и той же ячейки:

Garbage collector: collected 2252 objects
...