初读《编程之美》就想秀一下,结果还翻车了

news2024/11/23 21:25:02

文章目录

一、前言

二、我的思路

三、Code

四、翻车现场

五、后续问题


一、前言

———如何写一个短小的程序,让 Windows 的任务管理器显示CPU的占用率为50%?

这道有趣的面试题我是这两天从《编程之美》电子版中看到的,看意思就是邹老师在微软对一位面试者的提出的问题,我在网上了解过的面试题都只是一些算法题,不过这种CPU利用率控制的文章在站内其实还是很多的。

二、我的思路

  • 使用psutil库来获取CPU占用率。
  • 使用openpyxl库来创建和保存Excel文件。
  • 通过死循环不断获取当前时间和CPU占用率,并将其写入工作表。
  • 通过消耗CPU资源来达到让CPU占用率为50%的目的。
  • 如果当前时间减去开始时间大于10秒,则结束程序并保存工作簿。

三、Code

import time
import psutil
import openpyxl

# 创建一个工作簿
wb = openpyxl.Workbook()
# 选择第一个工作表
ws = wb.active
# 设置表头
ws.append(["时间", "CPU占用率"])

# 记录开始时间
start_time = time.time()

while True:
    # 获取当前时间
    current_time = time.time()
    # 如果当前时间减去开始时间大于1分钟,则结束程序
    if current_time - start_time > 60:
        break

    # 获取CPU占用率
    cpu_percent = psutil.cpu_percent(interval=0.1)
    # 将当前时间和CPU占用率写入工作表
    ws.append([current_time, cpu_percent])

    # 让CPU占用率保持在50%
    if cpu_percent < 50:
        # 消耗CPU资源
        for i in range(1000000):
            pass

# 保存工作簿
wb.save("cpu.xlsx")

四、翻车现场

 😭CPU倒是一点儿压力都没有,甚至都没有到50%!

延长时间为60秒后,依然翻车了:

五、后续问题

问:如何能通过命令行参数,让CPU的使用率保持在任意位置,如90%?

用Python的argparse库来解析命令行参数,获取用户输入的目标CPU使用率。代码如下:

import argparse
import psutil
import time

# 创建解析器
parser = argparse.ArgumentParser()
# 添加参数
parser.add_argument("target_cpu", type=float, help="目标CPU使用率")
# 解析参数
args = parser.parse_args()

while True:
    # 获取当前CPU使用率
    cpu_percent = psutil.cpu_percent(interval=0.1)
    # 如果当前CPU使用率小于目标值,则消耗CPU资源
    if cpu_percent < args.target_cpu:
        for i in range(1000000):
            pass
    # 如果当前CPU使用率大于目标值,则休眠一段时间
    elif cpu_percent > args.target_cpu:
        time.sleep(0.1)

在命令行输入:

python program.py 90

代码未经验证,我用的就是一个笔记本,no 作 no die,但是,作就一定 die。

问:如何能让CPU的使用率表现为一条正弦曲线?

用Python的math库中的sin函数来生成正弦曲线,并使用time库来模拟时间的变化。代码如下:

import math
import time
import psutil

while True:
    # 获取当前时间
    current_time = time.time()
    # 计算正弦值
    sin_value = math.sin(current_time)
    # 将正弦值映射到0~100之间
    target_cpu = (sin_value + 1) * 50
    # 获取当前CPU使用率
    cpu_percent = psutil.cpu_percent(interval=0.1)
    # 如果当前CPU使用率小于目标值,则消耗CPU资源
    if cpu_percent < target_cpu:
        for i in range(1000000):
            pass
    # 如果当前CPU使用率大于目标值,则休眠一段时间
    elif cpu_percent > target_cpu:
        time.sleep(0.1)

问:如果你的电脑是双核(dual-coreCPU)的,那么你的程序会有什么样的结果?为什么?

如果电脑是双核(dual-coreCPU)的,那么程序会在两个核心上运行,因此可能会使得程序的CPU使用率偏高。由于程序在两个核心上运行,可能导致程序的运行结果不稳定。因为两个核心的工作效率不同,所以程序的运行结果可能会有所差异。

原因:在双核CPU上运行程序时,程序会被分配到两个核心上运行,而每个核心都会消耗一定的CPU资源。所以当程序在两个核心上运行时,可能会使得程序的CPU使用率偏高。

解决方案:用 Python 的 multiprocessing 模块来锁定程序到一个特定的核心上运行。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

入门postgre sql(PG的下载和安装,包括普通用户源码构建的安装方式)

目录PG的下载安装1、Windows 上安装2、Linux上安装有root权限的安装无root权限的安装PG的下载安装 点击这里&#xff0c;了解pg 1、Windows 上安装 (1)下载安装 访问官网下载地址 https://www.enterprisedb.com/downloads/postgres-postgresql-downloads 下载最新发布的Po…

3.kafka-3.生产者,消费者

文章目录1.个性化配置&#xff0c;增加吞吐量2.发送事务消息3.消费组手动提交offset指定offset位置进行消费指定时间消费当新增消费者&#xff0c;或者消费组时&#xff0c;如何消费漏消息和重复消息如何解决消费解压问题1.个性化配置&#xff0c;增加吞吐量 private static vo…

使用 .NET 7、Blazor 和 .NET MAUI 构建你自己的 Podcast App

.NET Podcast App 首次在 .NET Conf 2021上推出&#xff0c;最近进行了更新以在 .NET Conf 2022 keynote 中突出显示 .NET 7 中的新功能。该 Podcast App 已准备好使用展示 .NET&#xff0c;ASP.NET Core&#xff0c;Blazor&#xff0c;.NET MAUI&#xff0c;Azure Container A…

Android 蓝牙开发——概述(一)

一、蓝牙简介 蓝牙技术是一种无线数据和语音通信开放的全球规范&#xff0c;它是基于低成本的近距离无线连接&#xff0c;为固定和移动设备建立通信环境的一种特殊的近距离无线技术连接。 其中将1.x~3.0之间的版本称之为经典蓝牙&#xff0c;4.x开始的蓝牙称之为低功耗蓝牙&…

Memcache学习总结

这里写自定义目录标题介绍一致性哈希寻找节点一致性哈希介绍内存管理slab结构寻找存储chunkChunk中存储的Item数据结构grow factor 调优回收删除一些特性介绍 基于内置内存Key-Value形式存储数据(字符串、对象)集群服务器是通过数组链表方式存储K-V数据<分布式>基于哈希…

编程语言那么多,我为什么推荐你学Java?

Java一直都是稳居排行榜第一的语言&#xff0c;在未来10年Java都会是最热门的语言之一&#xff0c;因为Java技术具有卓越的通用性、高效性、安全性和平台移植性&#xff0c;它可以跨平台的应用到不同的领域&#xff0c;工作需求足够大。 为什么选择学习Java编程语言&#xff1…

更具科技感的中塔机箱,模块设计兼容性强,鑫谷昆仑御风机箱上手

大家装机的时候应该都接触过鑫谷的机箱和散热器外设&#xff0c;作为一家有年头的外设品牌&#xff0c;这两年鑫谷推陈出新&#xff0c;像是在电源方面&#xff0c;就有不少很受欢迎的产品&#xff0c;像是昆仑系列等&#xff0c;前端鑫谷在昆仑系列中带来了一款设计新颖的机箱…

琥珀酰亚胺-双硫键-琥珀酰亚胺NHS-SS-NHS双端活性酯二硫键交联剂

名称:NHS-SS-NHS 中文名称:活性酯-双硫键-活性酯 琥珀酰亚胺-双硫键-琥珀酰亚胺 分子式 :C14H16N2O10S2 分子量 :436.41 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 用 途&#xff1a;仅供科研实验使用&#xff0c;不用于诊治 外观: 固体或粘性液体&am…

VMwareWorkstationPro16的下载与安装,以及vm账号注册的问题

VMwareWorkstationPro16的下载与安装&#xff0c;以及vm账号注册的问题查看虚拟化支持是否开启vm的安装vm账号注册的常见问题VM 16的安装步骤查看虚拟化支持是否开启 可以从任务管理器中的性能去查看CPU是否开启虚拟化支持 vm的安装 访问 vm 的官网: https://www.vmware.co…

I2C_Adapter驱动框架讲解与编写

I2C_Adapter驱动框架讲解与编写 文章目录I2C_Adapter驱动框架讲解与编写参考资料&#xff1a;一、 回顾1.1 2C驱动程序的层次1.2 I2C总线-设备-驱动模型二、 I2C_Adapter驱动框架2.1 核心的结构体1. i2c_adapter2. i2c_algorithm2.2 驱动程序框架1. 所涉及的函数2. i2c_algorit…

lq-递归

1、递归实现指数型枚举从 1∼n 这 n个整数中随机选取任意多个&#xff0c;输出所有可能的选择方案。输入格式输入一个整数 n。输出格式每行输出一种方案。同一行内的数必须升序排列&#xff0c;相邻两个数用恰好 1个空格隔开。对于没有选任何数的方案&#xff0c;输出空行。本题…

AStar(A*)算法核心思想( for unity)

AStar算法算法思想举例理解核心代码A* 算法&#xff0c;A* (A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法&#xff0c;也是解决许多搜索问题的有效算法。算法中的距离估算值与实际值越接近&#xff0c;最终搜索速度越快。 注意:AStar的类应该作为一种单例类只…

软考初级哪个好考

其实软考初级的实用性差不多。只是看自身怎么看&#xff0c;考哪一科对你来说&#xff0c;产生的意义更大&#xff0c;对自己以后的发展前景帮助大&#xff0c;那你就选择哪一科就行。 软考初级科目有&#xff1a;程序员、网络管理员、信息处理技术员、信息系统运行管理员、网…

C语言之vs2022安装教程,还不会的快来看

下载安装包官方无毒下载链接:https://visualstudio.microsoft.com/zh-hans/vs/点击链接或者复制到浏览器出现如下按钮点击下载社区版本Visual Studio 2022Community 2022: 社区版&#xff0c;也可以理解为个人版。适用于学生、开源和个人。一些新手用来学习是个不错的选择Profe…

第十三届蓝桥杯省赛 C++ B组 - 修剪灌木

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;蓝桥杯题解集合 &#x1f4dd;原题地址&#xff1a;付账问题 &#x1f4e3;专栏定位&#xff1a;为想参加蓝桥别的小伙伴整理常考算法题解&#xff0c;祝大家…

sentinel部署配置

sentinel部署配置sentinel 部署&#xff08;V1.8.6&#xff09;获取 Sentinel 控制台启动修改用户名密码控制台登录客户端集成sentinel 部署&#xff08;V1.8.6&#xff09; 获取 Sentinel 控制台 您可以从 release 页面 下载最新版本的控制台 jar 包。 官网&#xff1a; ht…

【C语言】深度剖析数据在内存中的存储---(附源码 | 建议收藏)

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;凡人修C传 &#x1f4ac;总结&#xff1a;希望你看完之后&…

让Tomcat服务器运行在Windows后台

让tomcat运行在Windows后台一、设置环境变量二、安装tomcat服务三、设置后台自动运行本机环境&#xff1a;win10一、设置环境变量 进入tomcat主目录的bin文件夹&#xff0c;复制路径 快捷键winr键唤出运行框&#xff0c;输入sysdm.cpl然后点击“确定”进入系统属性面板 在系统…

传统工科应该怎么学习机器学习or深度学习?

还是老生常谈。建议先不要直接上手机器学习/深度学习&#xff0c;先把你研究对象/信号的机理给搞清楚&#xff0c;然后再开始上现代信号处理&#xff0c;机器学习/深度学习算法&#xff0c;只有对你研究对象的机理深入了解&#xff0c;才能更好地对信号处理算法&#xff0c;机器…

【职工管理系统】C++全栈体系(十三)

职工管理系统 第一章 管理系统需求 职工管理系统可以用来管理公司内所有员工的信息 公司中职工分为三类&#xff1a;普通员工、经理、老板&#xff0c;显示信息时&#xff0c;需要显示职工编号、职工姓名、职工岗位、以及职责 普通员工职责&#xff1a;完成经理交给的任务 …