Я запускаю Python 2.7 на машине Linux с 16 ГБ оперативной памяти и 64-битной ОС. Сценарий Python, который я написал, может загружать слишком много данных в память, что замедляет работу машины до такой степени, что я больше не могу даже завершить процесс.
Хотя я могу ограничить память, позвонив:
ulimit -v 12000000
в моей оболочке перед запуском скрипта я хотел бы включить параметр ограничения в сам скрипт. Куда бы я ни посмотрел, модуль resource
упоминается как имеющий ту же мощность, что и ulimit
. Но звоню:
import resource
_, hard = resource.getrlimit(resource.RLIMIT_DATA)
resource.setrlimit(resource.RLIMIT_DATA, (12000, hard))
в начале мой скрипт абсолютно ничего не делает. Даже установка такого низкого значения, как 12000, никогда не приводила к сбою процесса. Я попробовал то же самое с RLIMIT_STACK
, и с тем же результатом. Любопытно, звонит:
import subprocess
subprocess.call('ulimit -v 12000', shell=True)
тоже ничего не делает.
Что я делаю неправильно? Я не мог найти реальных примеров использования в Интернете.
edit: для всех, кому интересно, использование subprocess.call
не работает, потому что оно создает (сюрприз, сюрприз!) новый процесс, который не зависит от того, в котором выполняется текущая программа python.