Python标准库 - os (3) 调度策略、系统信息
文章目录
- 6 调度策略
- 6.1 调度策略常量
- 6.2 访问和设置进程的调度策略
- 7 系统信息
- 7.1 系统信息
- 7.2 系统配置信息
- 7.3 系统负载
- 7.4 路径相关常量
- 7.5 生成随机字节
os模块提供了各种操作系统接口。包括环境变量、进程管理、进程调度、文件操作等方面。
这里整理了进程调度和查看系统信息的方法。
参考:os模块官方文档
6 调度策略
6.1 调度策略常量
调度策略常量 | 说明 |
---|---|
os.SCHED_OTHER | 默认调度策略 |
os.SCHED_BATCH | 用于CPU密集型进程的调度策略,尽可能为计算机的其余任务保留交互性。 |
os.SCHED_IDLE | 用于低优先级的后台任务的调度策略。 |
os.SCHED_SPORADIC | 用于偶发型服务程序的调度策略。 |
os.SCHED_FIFO | 先进先出的调度策略。 |
os.SCHED_RR | 循环式的调度策略。 |
os.SCHED_RESET_ON_FORK | 可与其他调度策略进行OR运算。进程设置分叉时,子进程的调度策略和优先级会被重置为默认。 |
6.2 访问和设置进程的调度策略
-
os.sched_get_priority_min(policy)
获取调度策略的最低优先级数值。 -
os.sched_get_priority_max(policy)
获取调度策略的最高优先级数值。 -
os.sched_getscheduler(pid)
返回指定进程的调度策略。 -
os.sched_setscheduler(pid, policy, param)
设置pid对应的进程的调度策略。
pid为0表示当前进程。param是一个os.sched_param
实例。 -
os.sched_getparam(pid)
获取指定进程的调度参数。>>> os.sched_getparam(0) posix.sched_param(sched_priority=0)
-
os.sched_setparam(pid, param)
设置指定进程的调度参数。 -
class os.sched_param(sched_priority)
这个类是上述的方法中用到的调度形参,是不可变对象。
sched_priority
表示调度策略的优先级。 -
os.sched_rr_get_interval(pid)
返回指定进程在循环调度策略下的时间片长度,单位为秒。>>> os.sched_rr_get_interval(0) 0.011000000000000001
-
os.sched_yield()
主动让出CPU。 -
os.sched_setaffinity(pid, mask)
将指定进程限制到一组CPU上,mask是整数的可迭代对象。 -
os.sched_getaffinity(pid)
返回指定进程被限制的那一组CPU。
pid为0时,返回当前进程的调用方线程被限制到的那组CPU。>>> os.sched_getaffinity(0) {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31} >>> os.sched_setaffinity(0, {0,1,2,3,4}) >>> os.sched_getaffinity(0) {0, 1, 2, 3, 4}
7 系统信息
7.1 系统信息
-
os.uname()
返回当前操作系统的识别信息。
返回值是一个对象,它有五个属性:sysname(操作系统名)、nodename(机器在网络上的名称)、release(操作系统发行信息)、version(操作系统版本信息)、machine(硬件标识符)。可以作为元组迭代这五个属性。>>> os.uname() posix.uname_result(sysname='Linux', nodename='xxxx', release='3.10.0-1062.9.1.el7.x86_64', version='#1 SMP Fri Dec 6 15:49:49 UTC 2019', machine='x86_64') >>> os.uname().sysname 'Linux'
-
os.cpu_count()
返回系统中的逻辑CPU数量,无法确定时返回None。>>> os.cpu_count() 32
-
os.process_cpu_count()
获取当前进程的调用方法线程可以使用的逻辑CPU数量。
7.2 系统配置信息
-
os.confstr(name)
返回字符串格式的系统配置信息。仅Unix可用。
name指定要查找的配置名称,可选值和所在系统相关,当前系统已定义的名称可以在os.confstr_names
查看。
name指定的配置值未定义时,返回None。
name配置名称不在已定义名称中时,出现ValueError
。
os.confstr_names
中存在的名称,但系统不支持,出现OSError
。 -
os.confstr_names
字典,系统定义的配置名称和配置值的映射。>>> os.confstr_names {'CS_GNU_LIBC_VERSION': 2, 'CS_GNU_LIBPTHREAD_VERSION': 3, ...}
-
os.sysconf(name)
返回整数格式的系统配置信息。仅Unix可用。
name指定的配置值未定义时,返回-1。 -
os.sysconf_names
系统配置名称对应的整数值。仅Unix可用。>>> os.sysconf_names {'SC_2_CHAR_TERM': 95, 'SC_2_C_BIND': 47, ...}
7.3 系统负载
os.getloadavg()
返回系统运行队列中最近1、5和15分钟内的平均进程数。
无法获取平均负载时出现OSError
错误。>>> os.getloadavg() (0.0, 0.01, 0.05)
7.4 路径相关常量
常量 | 说明 |
---|---|
os.curdir | 操作系统用来表示当前目录的常量字符串 |
os.pardir | 操作系统用来表示父目录的常量字符串 |
os.sep | 操作系统用来分隔路径的字符 |
os.altsep | 操作系统用来分隔路径的替代字符 |
os.extsep | 分割基本文件名宇扩展名的字符 |
os.pathsep | 操作系统用于分隔搜索路径(如环境变量PATH)中不同部分的字符串 |
os.defpath | 在环境变量没有PATH的情况下,默认的搜索路径 |
os.linesep | 系统用于分割行的字符 |
os.devnull | 空设备的文件路径 |
创建一个python文件:
import os
print("os.curdir".ljust(11, " "), os.curdir)
print("os.pardir".ljust(11, " "), os.pardir)
print("os.sep".ljust(11, " "), os.sep)
print("os.altsep".ljust(11, " "), os.altsep)
print("os.extsep".ljust(11, " "), os.extsep)
print("os.pathsep".ljust(11, " "), os.pathsep)
print("os.defpath".ljust(11, " "), os.defpath)
print("os.linesep".ljust(11, " "), os.linesep)
print("os.devnull".ljust(11, " "), os.devnull)
在linux上运行:
os.curdir .
os.pardir ..
os.sep /
os.altsep None
os.extsep .
os.pathsep :
os.defpath /bin:/usr/bin
os.linesep
os.devnull /dev/null
在Windows上运行:
os.curdir .
os.pardir ..
os.sep \
os.altsep /
os.extsep .
os.pathsep ;
os.defpath .;C:\bin
os.linesep
os.devnull nul
7.5 生成随机字节
-
os.getrandom(size, flags=0)
获取指定大小的随机字节。
用于为随机数生成器提供种子或用于加密。
需要Linux版本不低于3.17。
flags可以是os.GRND_NONBLOCK
、os.GRND_RANDOM
或它俩的或运算结果。默认从
/dev/urandom
读取时,熵池未初始化则os.getrandom()
会阻塞;从/dev/random
读取随机字节,没有可用的随机字节时,也会阻塞。
设置os.GRND_NONBLOCK
时,os.getrandom()
不会阻塞,会抛出BlockingError
异常。
设置os.GRND_RANDOM
,会从/dev/random
而不是/dev/urandom
提取随机字节。 -
os.urandom(size)
返回指定字节的随机字节。适合加密使用。
如果getrandom()
系统调用可用,就以阻塞模式运行,直到系统的urandom熵池初始完毕。
以上是os模块关于进程管理的方法和常量整理。
该模块的其他内容参考:
os模块:环境变量、进程所属的用户和组
os模块:进程管理