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

时间:2011-06-23 09:06:52

标签: python python-3.x

我正在为Windows开发一些Python代码。一个标准是它将使用不到1%的CPU。我知道由于像垃圾收集这样的事情,不可能一直保证这一点,但最好的做法是尽可能接近。我目前的解决方案是在代码周围散布很多time.sleep(0.1),特别是在循环中。但是,这种方法存在明显的问题。

可以采取哪些其他方法?

我还应该提到应用程序使用threading库中有很多线程。

编辑:设置流程优先级不是我想要的。

3 个答案:

答案 0 :(得分:11)

操作系统的工作是安排CPU时间。使用操作系统的内置进程限制机制(希望它们存在于Windows上)将进程限制为<1%CPU。

这种不必要的代码在代码中每隔几行睡一次就会使代码变得非常糟糕,无法创造,扩展和维护,更不用说非常不优雅了。 (在非常小的,有限的,关键的部分中,限制自己的速度可能很有用 - 例如,你的程序正在排队大量的IO请求而你不想淹没操作系统,你可能希望放一个睡眠直到 - [条件]在每个关键循环中,有可能淹没系统,但否则极其谨慎地使用。)

理想情况下,当您启动时,您可以从程序中调用适当的OS机制的API,告诉操作系统适当地限制您。

答案 1 :(得分:11)

如果目标是不打扰用户那么“低于1%CPU”是错误的方法。你真正想要的是“不要花时间远离其他进程,但仍然尽可能快地完成” - 这就是“低于正常”的进程优先级。有关如何更改当前进程的进程优先级的示例,请参阅http://code.activestate.com/recipes/496767-set-process-priority-in-windows/(使用默认参数调用该函数)。

对于销售宣传,您可以在计算机空闲时显示任务管理器(“看到?99%,我的应用程序完成大量工作”)然后启动一些CPU密集型应用程序(“几乎所有CPU时间都用完了”在用户正在使用的应用程序中,我的应用程序只是进入后台“)。

答案 2 :(得分:3)

如果用于演示的框是Windows Server,则可以使用Windows System Resource Manager将CPU使用率限制在所需阈值以下。除非Windows API明确公开此功能,否则尝试通过代码强制执行此行为是不可能的。