正如 Lukas Graf 所指出的,os.nice
增加 nice 级别,而不是设置它。
这似乎是一个 OS X 错误,如果您nice
在优先级为 20 或更高的情况下调用,则会触发该错误:
nice -n 20 python -c 'import os; os.nice(10)'
失败,而
nice -n 19 python -c 'import os; os.nice(10)'
作品。一个简单的 C 程序会出现同样的问题:
#include <unistd.h>
#include <string.h>
int main() {
if(nice(10) < 0)
perror("nice");
}
如果您将其作为 运行,则会打印错误nice -n 20 ./test
,但如果将其作为 运行,则会成功nice -n 19 ./test
。
原因是 nice 级别 20 高于nice
API ( NZERO
) 支持的最大 nice 级别。OS X 的nice
实用程序使用setpriority
,因此它忽略了限制,但nice
C 函数(由 Python 直接使用)确实关心。如果进程优先级为 20 或更高,nice
将尝试将优先级设置为 19,这是不允许的(因为它会增加进程优先级,只有特权用户可以这样做)。
这是一个奇怪的错误,但可以通过从不使用 20 的进程优先级来轻松避免。