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_NONBLOCKos.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模块:进程管理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/962276.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《DeepSeek 网页/API 性能异常(DeepSeek Web/API Degraded Performance):网络安全日志》

DeepSeek 网页/API 性能异常(DeepSeek Web/API Degraded Performance)订阅 已识别 - 已识别问题,并且正在实施修复。 1月 29, 2025 - 20:57 CST 更新 - 我们将继续监控任何其他问题。 1月 28, 2025 - 22&am…

安卓(android)饭堂广播【Android移动开发基础案例教程(第2版)黑马程序员】

一、实验目的(如果代码有错漏,可查看源码) 1.熟悉广播机制的实现流程。 2.掌握广播接收者的创建方式。 3.掌握广播的类型以及自定义官博的创建。 二、实验条件 熟悉广播机制、广播接收者的概念、广播接收者的创建方式、自定广播实现方式以及有…

分享|借鉴传统操作系统中分层内存系统的理念(虚拟上下文管理技术)提升LLMs在长上下文中的表现

《MemGPT: Towards LLMs as Operating Systems》 结论: 大语言模型(LLMs)上下文窗口受限问题的背景下, 提出了 MemGPT,通过类操作系统的分层内存系统的虚拟上下文管理技术, 提升 LLMs 在复杂人物&#…

games101-作业3

由于此次试验需要加载模型,涉及到本地环节,如果是windows系统,需要对main函数中的路径稍作改变: 这么写需要: #include "windows.h" 该段代码: #include "windows.h" int main(int ar…

Spring Boot 日志:项目的“行车记录仪”

一、什么是Spring Boot日志 (一)日志引入 在正式介绍日志之前,我们先来看看上篇文章中(Spring Boot 配置文件)中的验证码功能的一个代码片段: 这是一段校验用户输入的验证码是否正确的后端代码&#xff0c…

【大厂AI实践】OPPO:大规模知识图谱及其在小布助手中的应用

导读:OPPO知识图谱是OPPO数智工程系统小布助手团队主导、多团队协作建设的自研大规模通用知识图谱,目前已达到数亿实体和数十亿三元组的规模,主要落地在小布助手知识问答、电商搜索等场景。 本文主要分享OPPO知识图谱建设过程中算法相关的技…

机器学习周报-文献阅读

文章目录 摘要Abstract 1 相关知识1.1 WDN建模1.2 掩码操作(Masking Operation) 2 论文内容2.1 WDN信息的数据处理2.2 使用所收集的数据构造模型2.2.1 Gated graph neural network2.2.2 Masking operation2.2.3 Training loss2.2.4 Evaluation metrics 2…

工具的应用——安装copilot

一、介绍Copilot copilot是一个AI辅助编程的助手,作为需要拥抱AI的程序员可以从此尝试进入,至于好与不好,应当是小马过河,各有各的心得。这里不做评述。重点在安装copilot的过程中遇到了一些问题,然后把它总结下&…

后盾人JS--闭包明明白白

延伸函数环境生命周期 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> <…

顺启逆停程序

两台电机用Q0.0和Q0.1表示&#xff0c;分别有自身的启动和停止按钮&#xff0c;第一台电机启动后&#xff0c;第二台电机才能启动。停止时&#xff0c;第二台电机停止后&#xff0c;第一台电机才能停止。 1. 按下按钮SB1&#xff0c;接触器KM1线圈得电吸合&#xff0c;主触点…

登录授权流程

发起一个网络请求需要&#xff1a;1.请求地址 2.请求方式 3.请求参数 在检查中找到request method&#xff0c;在postman中设置同样的请求方式将登录的url接口复制到postman中&#xff08;json类型数据&#xff09;在payload中选择view parsed&#xff0c;将其填入Body-raw中 …

CUDA学习-内存访问

一 访存合并 1.1 说明 本部分内容主要参考: 搞懂 CUDA Shared Memory 上的 bank conflicts 和向量化指令(LDS.128 / float4)的访存特点 - 知乎 1.2 share memory结构 图1.1 share memory结构 放在 shared memory 中的数据是以 4 bytes(即 32 bits)作为 1 个 word,依…

基于Springboot的社区药房管理系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业多年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有实…

【力扣系列题目】最后一块石头的重量 分割回文串 验证回文串 等差数列划分{最大堆 背包 动态规划}

文章目录 七、最后一块石头的重量最后一块石头的重量【堆】[最后一块石头的重量 II](https://leetcode.cn/problems/last-stone-weight-ii/)【背包】 八、分割回文串分割回文串【分割子串方案数量】[分割回文串 II](https://leetcode.cn/problems/omKAoA/)【最少分割次数】[分割…

KIMI K1.5:用大语言模型扩展强化学习(论文翻译)

文章目录 KIMI K1.5技术报告摘要 1. 引言2. 方法&#xff1a;基于大语言模型的强化学习2.1 强化学习提示集整理2.2 长思维链监督微调2.3 强化学习2.3.1 问题设定2.3.2 策略优化2.3.3 长度惩罚2.3.4 采样策略2.3.5 训练方法的更多细节 2.4 长到短&#xff1a;短思维链模型的上下…

【Linux系统】进程间通信:实现命名管道通信

认识命名管道通信 命名管道通信的结构图示&#xff1a; 图中的 Server 和 Client 是不同的进程&#xff0c; Server 负责发送数据&#xff0c; Client 则是接收数据&#xff0c;进程之间通过命名管道进行数据通信 准备工作&#xff1a; 创建以下文件 Server.hpp #服务器类的…

SpringBoot Web开发(SpringMVC)

SpringBoot Web开发&#xff08;SpringMVC) MVC 核心组件和调用流程 Spring MVC与许多其他Web框架一样&#xff0c;是围绕前端控制器模式设计的&#xff0c;其中中央 Servlet DispatcherServlet 做整体请求处理调度&#xff01; . 除了DispatcherServletSpringMVC还会提供其他…

Linux《基础指令》

在之前的Linux《Linux简介与环境的搭建》当中我们已经初步了解了Linux的由来和如何搭建Linux环境&#xff0c;那么接下来在本篇当中我们就要来学习Linux的基础指令。在此我们的学习是包括两个部分&#xff0c;即指令和关于Linux的基础知识&#xff1b;因此本篇指令和基础知识的…

我的求职面经:(1)C++里指针和数组的区别

经典问题&#xff1a; char s1[]"hello"; char *s2"hello"; 1、s1的值是放在栈上的&#xff0c;值是可以修改的&#xff0c;而hello是一个字符串常量放在静态存储区是不能修改的。 2、内存大小不一样 #include<stdio.h>int main(){char s1[]&quo…

react中如何获取dom元素

实现代码 const inputRef useRef(null) inputRef.current.focus()