Максимальное приятное значение для os.nice()
Я знаю это os.nice(20)
устанавливает максимальный хороший уровень в Linux.
Но я не знаю ценность других юниксов (меня не волнует MS-Win).
Есть ли где-нибудь символическое значение для максимального приятного значения, которое я могу использовать из python?
Предпочитаемое решение:
os.nice(NICE_MAX)
Я попытался найти решение здесь:
- http://docs.python.org/2/library/os.html
dir(os)
grep -i nice /usr/lib64/python/os*.py
2 ответа
Я думаю, что наиболее близким к стандарту, который мы здесь получаем, является POSIX (IEEE 1003). Фактическая спецификация там оставляет диапазон для реализации, но отмечает:
Если значение +{NZERO} меньше самого низкого поддерживаемого значения nice системы, setpriority() должно установить для nice значение наименьшего поддерживаемого значения; если значение +{NZERO} больше, чем максимальное поддерживаемое значение системы, поддерживаемое системой, setpriority() должно установить для параметра nice самое высокое поддерживаемое значение.
Таким образом, если вы просто хотите высочайшую милость, вы можете пройти ее INT_MAX
, но это значение не так легко найти в Python. NZERO
действительно предоставляет границы, но также трудно найти (это определено в limits.h
).
Тем не менее, Python os.nice
не ведет себя как setpriority
- это увеличивает приятность процесса, а также возвращает результативность. Так что, если все, что вы хотите сделать, это установить самую высокую милость, вы можете просто запустить цикл while, пока os.nice(N)
возвращает одно и то же значение дважды, поскольку N - это любое положительное значение, которое вписывается в ctypes.c_int
(любое целое число от 1 до 32767 будет соответствовать).
Из getpriority(2) отмечает:
Фактический диапазон приоритетов зависит от версии ядра. Linux до 1.3.36 имел -infinity..15. Начиная с ядра 1.3.43, Linux имеет диапазон -20..19. Внутри ядра хорошие значения фактически представлены с использованием соответствующего диапазона 40..1 (поскольку отрицательные числа являются кодами ошибок), и это значения, используемые системными вызовами setpriority() и getpriority(). Функции-обёртки glibc для этих системных вызовов обрабатывают переводы между представлением user-land и ядром значения nice согласно формуле unice = 20 - knice.