我知道这os.nice(20)
在 linux 上设置了最大的 nice 级别。
但是我不知道其他unix的价值(我不关心MS-Win)。
我可以从python中使用的最大nice值是否有符号值?
首选解决方案:
os.nice(NICE_MAX)
我试图在这里找到解决方案:
- http://docs.python.org/2/library/os.html#os.nice
dir(os)
grep -i nice /usr/lib64/python/os*.py
我知道这os.nice(20)
在 linux 上设置了最大的 nice 级别。
但是我不知道其他unix的价值(我不关心MS-Win)。
我可以从python中使用的最大nice值是否有符号值?
首选解决方案:
os.nice(NICE_MAX)
我试图在这里找到解决方案:
dir(os)
grep -i nice /usr/lib64/python/os*.py
我认为我们在这里得到的最接近标准的是 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的任何整数)。
从getpriority(2)注释:
实际的优先级范围因内核版本而异。1.3.36 之前的 Linux 有 -infinity..15。从内核 1.3.43 开始,Linux 的范围为 -20..19。在内核中,nice 值实际上使用相应的范围 40..1 表示(因为负数是错误代码),这些是 setpriority() 和 getpriority() 系统调用使用的值。这些系统调用的 glibc 包装函数根据公式 unice = 20 - knice 处理 nice 值的用户级和内核表示之间的转换。