Ограничьте Python память VM

Для получения случайного целочисленного значения между 1 и N (включительно), можно использовать следующее.

CInt(Math.Ceiling(Rnd() * n)) + 1
20
задан Kara 21 June 2013 в 22:23
поделиться

2 ответа

В * nix вы можете поиграть с командой ulimit , в частности, -m (максимальный размер памяти) и -v (виртуальная память).

12
ответ дан 29 November 2019 в 23:20
поделиться

Не тратьте на это время.

Вместо этого, если вы хотите поиграть с исключениями MemoryError , создайте дизайн, который изолирует конструкцию объекта, чтобы вы могли его протестировать .

Вместо этого

for i in range(1000000000000000000000):
    try:
        y = AnotherClass()
    except MemoryError:
        # the thing we wanted to test

Подумайте об этом.

for i in range(1000000000000000000000):
    try:
        y = makeAnotherClass()
    except MemoryError:
        # the thing we wanted to test

Это требует одного крошечного дополнения к вашему проекту.

class AnotherClass( object ):
    def __init__( self, *args, **kw ):
    blah blah blah

def makeAnotherClass( *args, **kw ):
    return AnotherClass( *args, **kw )

Дополнительная функция - в конечном итоге - оказывается хорошим шаблоном проектирования. Это Factory , и вам часто нужно что-то подобное.

Затем вы можете заменить этот makeAnotherClass на что-то вроде этого.

class Maker( object ):
    def __init__( self, count= 12 ):
        self.count= count
    def __call__( self, *args, **kw ):
        if self.count == 0:
            raise MemoryError
        self.count -= 1
        return AnotherClass( *args, **kw )
 makeAnotherClass= Maker( count=12 )

Эта версия вызовет исключение без вашего участия ограничивать память любым неясным, неподъемным, сложным или магическим способом.

3
ответ дан 29 November 2019 в 23:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: