Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种方法可以;“尼斯”;Python脚本的一种方法_Python_Linux_Scheduling_Nice - Fatal编程技术网

有没有一种方法可以;“尼斯”;Python脚本的一种方法

有没有一种方法可以;“尼斯”;Python脚本的一种方法,python,linux,scheduling,nice,Python,Linux,Scheduling,Nice,我的脚本有多个组件,只有一些部分需要是nice-d。i、 例如,以低优先级运行 有没有办法只使用Python的一种方法,或者我需要把它分解成几个进程 我正在使用Linux,如果这很重要的话。您可以编写一个decorator,在进入和退出时重新激活正在运行的进程: import os import functools def low_priority(f): @functools.wraps(f) def reniced(*args, **kwargs): os.

我的脚本有多个组件,只有一些部分需要是
nice
-d。i、 例如,以低优先级运行

有没有办法只使用Python的一种方法,或者我需要把它分解成几个进程


我正在使用Linux,如果这很重要的话。

您可以编写一个decorator,在进入和退出时重新激活正在运行的进程:

import os
import functools

def low_priority(f):
    @functools.wraps(f)
    def reniced(*args, **kwargs):
        os.nice(5)
        try:
            f(*args,**kwargs)
        finally:
            os.nice(-5)
    return reniced
然后您可以这样使用它:

@low_priority
def test():
    pass # Or whatever you want to do.
免责声明:

  • 在我的机器上工作,不确定操作系统的通用性
  • 如下所述,它是否有效可能取决于您的操作系统/发行版,或者取决于您是否是root用户
  • Nice是基于每个过程的。每个进程具有多个线程的行为可能不正常,并且可能崩溃

  • 进程优先级是由操作系统管理的,所以我很确定您要么使用
    子进程
    ,要么执行某种系统,让脚本找到自己的进程并动态更改其优先级。当然,更好的问题是,是否有任何部分真的需要以高优先级运行,或者您可以以低优先级运行整个过程。这只能作为根运行。普通用户是不允许取消进程的尼斯的,即使他们是那个尼斯它。@另一个家伙,我不确定这是真的,我现在正在运行它,它似乎工作得很好。ArchLinux,非根目录。也许这是一个依赖于分布的东西?不应该。也许你不知何故获得了CAP_SYS_NICE?sudo-u-python-c是否导入操作系统;os.nice(5);很好(-5);'工作?是的。不知道为什么这里不同。执行相反的操作(降低,然后升高)会导致异常。