Как продолжать использовать память после того, как «MemoryError» был пойман - PullRequest
0 голосов
/ 06 февраля 2019

Я разрабатываю инструмент для стресс-тестирования.Его цель - использовать всю свободную память.Моя проблема состоит в том, чтобы постоянно использовать всю свободную память, даже если некоторая ее часть была освобождена во время выполнения скрипта и особенно после перехвата MemoryError.

Я пытался обработать исключение «MemoryError» с помощью операторов pass или continue, но оно выигралоне поможетЕсли происходит MemoryError, скрипт не использует вновь освобожденную память.Возможно, это происходит из-за некоторых ограничений ОС.

def mem_cons(x):
timestamp()
a = []
idx = 0
appender = a.append
MEGA_STR = 'F' * (10 ** 4 * x)
try:
    while True:
        try:
            idx += 1
            if idx > 10000:
                if 'kill' in flag:
                    print("")
                    timestamp()
                    print("Memory consumption was remotely stopped.\nPlease use \'ctrl+c\' command to exit")
                    a = []
                    timestamp()
                    print("Memory was cleared")
                    break
                idx = 0
            appender(MEGA_STR)
        except MemoryError:
            continue
            timestamp()
except KeyboardInterrupt:
    print("")
    timestamp()
    print("Program has been stopped")

Сценарий:

  • Сценарий потребляет память от 20% до 100%
  • Преобразование MemoryException
  • Некоторая память была освобождена вручную, скажем - 5.1%

Фактический результат:

После этого уровень потребления всей памяти все еще остается на уровне 94,9% и не растет(как мы видим на график - после красной линии)

Ожидаемый результат:

Скрипт продолжает потреблять освобожденную вручную память и удерживает ееуровень на 100% после того, как MemoryException был пойман.

Заранее спасибо!

...