【问题标题】:Is there a way to "nice" a method of a Python script有没有办法“好”一个 Python 脚本的方法
【发布时间】:2013-01-10 02:57:10
【问题描述】:

我的脚本有多个组件,只有部分需要nice-d。即,以低优先级运行。

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

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

【问题讨论】:

  • 进程优先级由操作系统管理,所以我很确定您要么必须使用subprocess,要么执行某种系统,让您的脚本找到自己的进程并动态更改其优先级.当然,更好的问题是是否真的需要以高优先级运行任何部分,或者您可以只以低优先级运行整个事情。

标签: python linux scheduling nice


【解决方案1】:

您可以编写一个装饰器,在进入和退出时调整正在运行的进程:

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.

免责声明:

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

【讨论】:

  • 这只能作为 root 工作。普通用户不允许取消对进程的优化,即使他们是优化进程的人。
  • @thatotherguy 我不确定这是不是真的,我现在正在运行它,它似乎工作得很好。 Arch linux,非root。也许这是一个依赖于分布的事情?
  • 不应该。也许您以某种方式获得了 CAP_SYS_NICE? sudo -u nobody python -c 'import os; os.nice(5); os.nice(-5);' 工作吗?
  • 是的。不知道为什么这里不一样。做相反的事情(降低,然后提高)确实会导致异常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-22
  • 2020-12-15
  • 2021-01-03
  • 2010-10-05
  • 1970-01-01
  • 2021-07-21
相关资源
最近更新 更多