Как установить ограничение памяти для интерпретатора Python? [Дубликат]

Я решил этот совершенно другой маршрут (потому что я торопился и не хотел реализовывать новый HtmlHelper):

Я завернул свой Partial View в большом if-else:

@if ((bool)ViewData["ShouldRenderScripts"] == true){
// Scripts
}else{
// Html
}

Затем я дважды вызывал Partial с пользовательской ViewData:

@Html.Partial("MyPartialView", Model, 
    new ViewDataDictionary { { "ShouldRenderScripts", false } })

@section scripts{
    @Html.Partial("MyPartialView", Model, 
        new ViewDataDictionary { { "ShouldRenderScripts", true } })
}
46
задан martineau 18 September 2016 в 15:40
поделиться

2 ответа

Проверьте resource.setrlimit () . Он работает только в системах Unix, но похоже, что это может быть то, что вы ищете, так как вы можете выбрать максимальный размер кучи для вашего процесса и детей вашего процесса с параметром resource.RLIMIT_DATA.

EDIT : Добавление примера:

import resource

rsrc = resource.RLIMIT_DATA
soft, hard = resource.getrlimit(rsrc)
print 'Soft limit starts as  :', soft

resource.setrlimit(rsrc, (1024, hard)) #limit to one kilobyte

soft, hard = resource.getrlimit(rsrc)
print 'Soft limit changed to :', soft

Я не уверен, что ваш вариант использования в точности, но возможно, вам нужно установить ограничение на размер стека вместо resouce.RLIMIT_STACK. Пройдя этот предел, вы отправите сигнал SIGSEGV вашему процессу, и для его обработки вам потребуется использовать альтернативный стек сигналов, как описано в man-странице setrlimit Linux . Я не уверен, что sigaltstack реализован на python, так что это может оказаться затруднительным, если вы хотите оправиться от перехода по этой границе.

46
ответ дан xitrium 19 August 2018 в 13:17
поделиться
  • 1
    Можете ли вы привести пример? Я попробовал установить различные ресурсы rlimits, но я все еще мог выделить список гигабайт. Модуль ресурсов «чувствует себя правильно», но я не могу заставить его работать в Linux. – carl 22 February 2010 в 05:20
  • 2
    Я добавил свой тест на вопрос. Я понимаю, что программа Python должна выйти после достижения предела. – carl 22 February 2010 в 06:26
  • 3
    Кроме того, меня не волнует, что произойдет, если предел достигнут - программа может вылететь из строя, повесить или что-то еще, до тех пор, пока она не будет выделять больше памяти. – carl 22 February 2010 в 06:29
  • 4
    Да, использование RLIMIT_DATA для меня тоже не работает, но RLIMIT_STACK (Mac OS X). – xitrium 23 February 2010 в 03:30
  • 5
    Если RLIMIT_DATA не работает для вас, попробуйте RLIMIT_AS (максимальное адресное пространство). @Yang – Marcin Wojnarski 10 September 2015 в 18:21

Посмотрите на ulimit . Он позволяет устанавливать квоты ресурсов. Возможно, также нужны соответствующие настройки ядра.

0
ответ дан SpliFF 19 August 2018 в 13:17
поделиться
  • 1
    Когда вы используете PAM в любом случае, /etc/security/limits.conf - лучшее место для установки лимитов. ulimit - это только функция оболочки Bash. – Jochen Ritzel 22 February 2010 в 01:32
  • 2
    ulimit использует те же системные вызовы, что и модуль ресурсов Python – Willem 19 November 2013 в 22:13
Другие вопросы по тегам:

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