Python | os.getpriority 函数

Lasted 2020-12-07 12:31:13

os.getpriority 函数获取程序调度优先级。which 参数值可以是 PRIO_PROCESS,PRIO_PGRP,或 PRIO_USER 中的一个,who 是相对于 which (PRIO_PROCESS 的进程标识符,PRIO_PGRP 的进程组标识符和 PRIO_USER 的用户ID)。当 who 为 0 时(分别)表示调用的进程,调用进程的进程组或调用进程所属的真实用户 ID。

在 Linux 中,使用 ps -l 或 top 命令可以查看进程的优先级。优先级范围一般从 -20 到 19,-20 表示调度优先级最高,19 表示优先级最低。默认优先级一般为 0。可通过 nice 命令查看。

函数定义

os.getpriority(which, who)
# 函数定义

if sys.platform != 'win32':
    # Unix only
    ...
    def getpriority(which: int, who: int) -> int: ...
    ...

兼容性:Unix 系统。

参数

  • checkwhich - which 参数值。
    • os.PRIO_PROCESS=0 进程标识符。
    • os.PRIO_PGRP=1 进程组标识符。
    • os.PRIO_USER=2 用户ID。
  • checkwho - 跟 which 值对应。

返回值

  • checkint - 优先级。

示例1: - 使用 os.getpriority() 函数获取进程优先级。

# coding=utf-8

# Python3 代码
# 讲解怎样使用 os.getpriority() 函数获取进程优先级

# 引入 os 库
import os

# 根据进程ID查看优先级
which = os.PRIO_PROCESS
who = os.getpid()

# 获取优先级
prio = os.getpriority(which, who)

print("Process priority::", prio)
Process priority:: 0

示例2: - 获取和设置进程优先级。

# coding=utf-8

def test_set_get_priority(self):

    base = os.getpriority(os.PRIO_PROCESS, os.getpid())
    os.setpriority(os.PRIO_PROCESS, os.getpid(), base + 1)
    try:
        new_prio = os.getpriority(os.PRIO_PROCESS, os.getpid())
        if base >= 19 and new_prio <= 19:
            raise unittest.SkipTest(
                "unable to reliably test setpriority at current nice level of %s" % base)
        else:
            self.assertEqual(new_prio, base + 1)
    finally:
        try:
            os.setpriority(os.PRIO_PROCESS, os.getpid(), base)
        except OSError as err:
            if err.errno != errno.EACCES:
                raise