如何用不到1%的CPU运行Python代码?

1 投票
3 回答
1535 浏览
提问于 2025-04-16 20:08

我正在为Windows开发一些Python代码。一个要求是它的CPU使用率要低于1%。我知道这并不总是能保证,因为像垃圾回收这样的事情会影响,但我想知道有什么最佳方法可以尽量接近这个目标。目前我的解决方案是在代码中到处加上很多time.sleep(0.1),特别是在循环里。不过,这种方法显然有一些问题。

还有什么其他的方法可以尝试呢?

我还要提到,这个应用程序里有很多线程,使用了threading库。

补充说明:我并不是想调整进程优先级。

3 个回答

3

如果演示用的电脑是Windows Server系统的话,可以使用Windows系统资源管理器来限制CPU的使用率,让它低于你设定的标准。想通过代码强行实现这个功能是不可能的,除非有Windows的API明确提供了这个能力。

11

操作系统的工作就是安排CPU的使用时间。你可以利用操作系统自带的进程限制功能(希望在Windows上也有这个功能)来把你的进程限制在小于1%的CPU使用率。

在代码中每隔几行就加上不必要的睡眠时间,这样会让代码变得很难写、扩展和维护,更不用说看起来非常不优雅了。(在一些非常小、有限的关键部分,限制自己的速度可能有用,比如你的程序在排队处理很多输入输出请求,而你又不想让操作系统负担过重,这时候你可以在每个可能让系统负担过重的关键循环中加一个“睡眠直到[条件]”,但平时最好还是尽量少用。)

理想情况下,你应该在程序启动时调用适当的操作系统机制的API,告诉操作系统合理地限制你的使用。

11

如果你的目标是让用户不受打扰,那么“CPU使用率低于1%”这个方法就不太对了。你真正想要的是“不要占用其他程序的时间,但还是要尽快完成任务”——这就是“低于正常”进程优先级的作用。你可以查看这个链接 http://code.activestate.com/recipes/496767-set-process-priority-in-windows/,里面有关于如何改变当前进程优先级的例子(调用那个函数,使用默认参数就可以了)。

在做宣传时,你可以在电脑空闲的时候展示任务管理器(“你看?99%的CPU,说明我的应用程序完成了很多工作”),然后再启动一些需要大量CPU的程序(“几乎所有的CPU时间都花在用户正在使用的应用上,我的应用程序只是进入了后台”)。

撰写回答