os.nice()的最大值

时间:2014-03-20 12:05:37

标签: python unix code-cleanup nice

我知道os.nice(20)设置了linux上的最高级别。

但我不知道其他unix的价值(我不关心MS-Win)。

我可以在python中使用最大nice值的某个符号值吗?

首选解决方案:

os.nice(NICE_MAX)

我试图在这里找到解决方案:

2 个答案:

答案 0 :(得分:2)

我认为最接近我们得到的标准来自POSIX(IEEE 1003)。那里的实际规范确实将范围留给了实现,但注意到:

  

如果值+ {NZERO}小于系统支持的最低值   value,setpriority()应将nice值设置为支持的最低值   值;如果值+ {NZERO}大于系统支持的最高值   nice值,setpriority()应将nice值设置为最高值   支持的价值。

因此,如果你只想要最高的好处,你可以传递它INT_MAX,但是在Python中不容易找到这个值。 NZERO确实提供了界限,但同样很难找到(它在limits.h中定义)。

然而,Python os.nice的行为并不像setpriority - 它增加了过程的好处,并且还返回了最终的好处。因此,如果你想要做的就是设置最高的好处,你可以运行一个while循环,直到os.nice(N)返回相同的值两次,因为N是任何适合ctypes.c_int的正值(任何整数)从1到32767保证适合)。

答案 1 :(得分:0)

来自getpriority(2)注释:

  

实际优先级范围因内核版本而异。 Linux的   在1.3.36之前有-infinity..15。从内核1.3.43开始,Linux就有了   范围-20..19。在内核中,实际上是很好的值   使用相应的范围40..1表示(因为负数   数字是错误代码),这些是使用的值   setpriority()和getpriority()系统调用。 glibc包装器   这些系统调用的函数处理之间的转换   用户土地和内核表示的好价值根据   公式unice = 20 - knice。