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

news2024/11/26 4:39:38

文章目录

一、前言

二、我的思路

三、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/167869.html

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

相关文章

LabVIEW写入可快速加载的TDMS文件

LabVIEW写入可快速加载的TDMS文件TDMS文件格式的设计目的是在尽可能快地读写数据的同时仍保持足够的灵活性来适应采集过程中通道数量和采样率的变化。 但是数据读写速度快的文件未必可快速加载。 TDMS文件是一个完全的二进制文件&#xff0c;由多个部分数据段组成&#xff0c;在…

多线程~实现一个自己的线程池,以及基于单例模式的线程池

目录 1.线程池的概念 2.线程池的实现 3.基于单例模式的线程池 &#xff08;1&#xff09;.单例模式的概念 &#xff08;2&#xff09;.基于单例模式的线程池 1.线程池的概念 池化技术本质上都是为了提高效率。线程池也是同理&#xff0c;提前准备好一些线程&#xff0c;用…

Lesson 1. 线性回归模型的一般实现形式

文章目录一、线性回归模型建模准备1. 数据准备2. 模型准备二、线性回归模型训练1. 模型训练的本质&#xff1a;有方向的参数调整1.1 模型训练与模型参数调整1.2 模型评估指标与损失函数1.3 损失函数与参数求解2. 利用最优化方法求解损失函数2.1 损失函数的求解2.2 图形展示损失…

【DevOps实战|基于Jenkins与Gitlab构建企业级持续集成环境系统】(更新中未完成)

目录 一、DevOps简介 二、CI/CD简介 1、代码部署的最基本流程 2、软件开发生命周期 3、持续集成整体流程 三、Git简介 1、GitHub与Gitlab区别 四、基于Jenkins与Gitlab构建持续集成环境系统 1、环境说明 2、安装gitlab 1&#xff09;配置邮件报警 一、DevOps简介 De…

目标检测的新范式:Towards Open World Object Detection

论文题目&#xff1a;Towards Open World Object Detection 1 摘要 人类有一种识别其环境中未知物体实例的自然本能(natural instinct)。当这些未知的实例最终获得相应的知识时&#xff0c;对它们的内在好奇心有助于了解它们。这促使我们提出一种新的计算机视觉问题称为&…

Week 11

洛谷P1796 汤姆斯的天堂梦 题目描述 汤姆斯生活在一个等级为 000 的星球上。那里的环境极其恶劣&#xff0c;每天 121212 小时的工作和成堆的垃圾让人忍无可忍。他向往着等级为 NNN 的星球上天堂般的生活。 有一些航班将人从低等级的星球送上高一级的星球&#xff0c;有时需…

算法第十四期——动态规划(DP)初入门

目录 DP初步:状态转移与递推 最少硬币问题 DP基础 DP的两个特征 DP:记忆化 图解DP求解过程 最经典的DP问题&#xff1a;0/1背包 模板题&#xff1a;小明的背包 DP状态设计 DP状态转移方程&#xff08;重点&#xff09; 代码 空间优化:滚动数组 (1&#xff09;交替滚…

【机组组合】基于Benders分解算法解决混合整数规划问题——机组组合问题(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【鸟哥杂谈】腾讯云 CentOS8 Linux环境下通过docker安装mysql

忘记过去&#xff0c;超越自己 ❤️ 博客主页 单片机菜鸟哥&#xff0c;一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-01-15 ❤️❤️ 本篇更新记录 2023-01-15 ❤️&#x1f389; 欢迎关注 &#x1f50e;点赞 &#x1f44d;收藏 ⭐️留言&#x1f4dd;&#x1f64…

Vite中如何更好的使用TS

TS 是JS的一个类型检查工具&#xff0c;检查我们代码中可能会存在的一些隐形问题&#xff1b;同时可以使我们的编译器具备一些语法提示功能。 如果我们使用create-vue&#xff08;vue3官方脚手架工具&#xff09;创建了项目&#xff0c;该项目基于 Vite 且 TypeScript 已经准备…

SpringBoot+Vue使用easypol出现无法导出Excel表的问题

本篇博文目录1.异常信息2.原因3.解决办法4.详细的SpringBooteasypol前后端分离实现excel导出的步骤1.异常信息 今天在使用easypol导出Excel表的时候,发现能够从后端接口返回数据&#xff0c;但是就是无法导出Excel,控制台输出devicepolicies:1 Uncaught (in promise) error,并且…

2022年度总结 - 明月醉窗台

2022年度总结 - 明月醉窗台 1.2022年成果 - 感谢CSDN提供了自我创作的平台&#xff0c;有多少个夜晚我将其作为心灵的寄托... - 感谢各位小伙伴的抬爱和学习过程中的共同见证&#xff0c;将人生视为一条向上的曲线是明确且坚持不懈的抉择... - 立足当下&#xff0c;不忘脚踏实…

【算法基础】1.5 前缀和与差分

文章目录前缀和题目描述解法讲解二维前缀和题目描述解法讲解差分题目描述解法讲解二维差分题目描述解法讲解前缀和 题目描述 输入一个长度为 n 的整数序列。 接下来再输入 m 个询问&#xff0c;每个询问输入一对 l,r。 对于每个询问&#xff0c;输出原序列中从第 l 个数到第 …

IVD-Net:多模态UNet在MRI中的椎间盘定位和分割

摘要 本文提出了一种多模态磁共振图像中的椎间盘&#xff08;IVD&#xff09;定位和分割体系结构&#xff0c;它扩展了UNet。与单一的图像相比&#xff0c;多模态的数据带来了互补的信息有助于更好的数据表示和判别能力。 在本文中&#xff0c;每种MRI模态的数据都以不同的路…

Waf功能、分类与绕过

一. waf工作原理 Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。 常见的系统攻击分为两类&#xff1a; 一是利用Web服务器的漏洞进行攻击&#xff0c;如DDOS攻击、病毒木马破坏等攻击&#xff1b;二是利用网页自身的安全漏洞进…

【C语言】实现通讯录(详解)

目录 一、需要实现的功能 1.1 类型和结构体的定义 二、拆分代码 2.1 游戏菜单 2.1.1 函数调用 2.1.2 函数体的实现 2.1.2运行效果 2.2 初始化结构体 2.2.1 函数调用 2.2.2 函数体的实现 2.2.3 运行结果 2.3 添加联系人信息 2.3.1 函数调用 2.3.2 函数体的实现 2…

操作系统之光--鸿蒙

鸿蒙是什么&#xff1f;鸿蒙包含Openharmony和harmonyOS。Openharmony是华为向开放原子开源基金会捐赠了鸿蒙开源部分的代码&#xff0c;归属于开放原子开源基金会。HarmonyOS是基于Openharmony的商业发行版本。目前大家华为手机上运行就是它。鸿蒙能做什么&#xff1f;很明显&…

【算法基础】1.6 双指针算法

文章目录双指针思想最长连续不重复子序列数组元素的目标和题目讲解判断子序列双指针思想 双指针算法&#xff0c;就是可以将 n ^ 2 优化到 n。 最长连续不重复子序列 给定一个长度为 n 的整数序列&#xff0c;请找出最长的不包含重复的数的连续区间&#xff0c;输出它的长度…

IO流的学习

文章目录一、File类的使用创建File实例File常用方法总结二、IO流分类读入数据的基本操作步骤&#xff08;第一种&#xff09;步骤&#xff08;第二种&#xff09;写出数据的基本操作步骤读入并写出数据的基本操作&#xff08;复制&#xff09;步骤注意处理流之一&#xff1a;缓…

【Nginx】静态资源部署(下)

文章目录静态资源的缓存处理缓存概述浏览器缓存相关指令expires指令add_header指令Nginx的跨域问题解决同源策略跨域问题跨域问题的案例演示解决方案静态资源防盗链什么是资源盗链Nginx防盗链的实现原理&#xff1a;针对目录进行防盗链静态资源的缓存处理 缓存概述 什么是缓存…