Python - 降低niceness值

时间:2015-12-11 15:32:25

标签: python unix nice

使用python我可以轻松地提高当前流程的优点:

>>> import os
>>> import psutil

>>> # Use os to increase by 3
>>> os.nice(3)
3

>>> # Use psutil to set to 10
>>> psutil.Process(os.getpid()).nice(10)
>>> psutil.Process(os.getpid()).nice()
10

但是,似乎不允许降低流程的优点:

>>> os.nice(-1)
OSError: [Errno 1] Operation not permitted

>>> psutil.Process(os.getpid()).nice(5)
psutil.AccessDenied: psutil.AccessDenied (pid=14955)

这样做的正确方法是什么?棘轮机制是一个错误还是一个功能?

3 个答案:

答案 0 :(得分:7)

默认情况下,Linux不允许非特权用户降低其进程的nice值(即增加优先级),因此一个用户不会创建一个高优先级进程来饿死其他用户。 Python只是将操作系统提供的错误转发为异常。

root用户可以提高进程的优先级,但以root身份运行会产生其他后果。

答案 1 :(得分:3)

这不是Python或os.nice接口的限制。在man 2 nice中描述了只有超级用户可能会降低进程的优点:

  

nice()将inc添加到调用进程的nice值。 (更高   nice值表示低优先级。)只有超级用户可以指定a   负增量或优先级增加。好的值的范围是   在getpriority(2)中描述。

答案 2 :(得分:0)

我遇到了相同的错误[Errno 2] Operation not permitted

我不想使用sudo启动脚本,所以出现了以下解决方法:

def decrease_nice():
    pid = os.getpid()
    os.system("sudo renice -n -19 -p " + str(pid))

def normal_nice():
    pid = os.getpid()
    os.system("sudo renice -n 0 -p " + str(pid))