2

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

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

我可以从python中使用的最大nice值是否有符号值?

首选解决方案:

os.nice(NICE_MAX)

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

4

2 回答 2

2

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

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

因此,如果您只想要最高的友好度,您可以通过它INT_MAX,但在 Python 中不容易找到该值。NZERO确实提供了界限,但同样很难找到(在 中定义limits.h)。

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

于 2014-03-20T14:09:55.233 回答
0

getpriority(2)注释:

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

于 2014-03-20T12:28:09.733 回答