Постоянно увеличивающееся использование памяти после запуска скриптов Python через планировщик задач - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть несколько запланированных задач Python-скрипта, которые выполняются на моем компьютере (не администратор на указанном компьютере - поэтому я не могу копаться глубже с perfmon или другими системными инструментами).Каждый день я наблюдаю довольно постоянное увеличение (7% от 16 ГБ ОЗУ) использования системной памяти и подозреваю возможную утечку памяти в моем коде.

Полный перезапуск компьютера приводит к очистке памяти.Примерно через 9-10 дней моя системная память снова исчерпана, требуя еще одного перезапуска.

Каждый сценарий выполняет примерно одну и ту же функцию:

  • Доступ к сетевой базе данных SQL с использованием пакета sqlalchemy
  • Создание кадра данных pandas из извлеченной базы данных, возвращаемого
  • объединение кадра данных pandas с существующим файлом Excel .XLS и сохранение поверх существующего файла XLS
  • импорт сохраненного файла XLS и его стиль (цвет, ширина столбца и т. д.) с пакетом Openpyxl

После того, как я закончу с каждым соответствующим объектом, я удаляю его так:

del (sample_df, previous_df)

В концеМой сценарий Я также включил следующий код для перехвата любых глобальных переменных, которые я пропустил, и вручную запустил сборщик мусора:

for name in dir():
    if not name.startswith('_'):
        del globals()[name]

import gc
gc.collect()

Я попытался использовать пакет Pympler и его возможности .tracker, и в концемоего скрипта, запущенного

tracker.print_diff()

, приводят к тому, что следующие объекты (слева?) в памяти, которые, по-видимому, не были собраны мусорным соllector:

                  types |   # objects |   total size

                  list |       19018 |    968.68 KB
                   str |       19025 |    862.44 KB
                   int |        1122 |     13.15 KB

После запуска сборщика мусора я также рассмотрел использование памяти элементами, все еще находящимися в локальном пространстве имен:

import sys
for var, obj in locals().items():
   print var, sys.getsizeof(obj)

Возвращает:

__ 36
__builtin__ 28
SummaryTracker 452
gc 28
__package__ 8
_i11 78
__doc__ 85
_i 66
__file__ 208
_sh 28
name 23
_7 256
_6 36
_3 3212
_2 36
_i13 190
_i12 66
_iii 66
_i10 66
_oh 140
_dh 40
_i9 110
_i8 390
_i7 36
_i6 32
_i5 390
_i4 190
_i3 42
_i2 38
_i1 390
tracker 32
__builtins__ 28
sys 28
__name__ 29
___ 3212
_ 256
_ii 78
_ih 100

Кажется, что объект "___" использует приличную память, но я понятия не имею, откуда это.

Я попытался включить столько же устранения неполадок, сколько и я.Заранее спасибо за помощь.

...