如何在Windows下限制Python中的内存和CPU使用率?

时间:2017-05-04 06:37:03

标签: python windows python-3.x

我使用Python和Windows下的Tensorflow库编写深度学习软件。有时我错误地将内容加载到内存中并且计算机停止响应;我甚至无法杀死这个过程。

是否可以在Windows下限制Python脚本的内存和CPU使用率?我使用PyCharm作为编辑器。在UNIX系统下,似乎可以使用resource.RLIMIT_VMEM,但在Windows下我收到通知no module named resource

3 个答案:

答案 0 :(得分:0)

当然,您可以使用Win32 Jobs API(CreateJobObject& AssignProcessToJobObject)将您的程序生成为子流程并管理其资源。

但是我想一个更简单的解决方案,就是使用Docker来创建一个托管环境。

答案 1 :(得分:0)

这是运行资源密集型进程时的常见问题,在该进程中可能很难预测所需的内存总量。

如果主要问题是整个系统死机,则可以创建一个监视程序,以防止该事件发生并终止该进程。它有点笨拙,不如UNIX解决方案那么干净,并且会花费您一些开销,但至少可以节省您的重启时间!

使用psutil包,可以轻松地在python中完成此操作。只要使用了90%以上的虚拟内存,这段简短的代码就会运行,并杀死占用最多内存的python.exe进程:

import time
import psutil
while True:
    if psutil.virtual_memory().percent > 90:
        processes = []
        for proc in psutil.process_iter():
            if proc.name() == 'python.exe':
                processes.append((proc, proc.memory_percent()))
        sorted(processes, key=lambda x: x[1])[-1][0].kill()
    time.sleep(10)

也可以使用psutil.cpu_percent()将其用于CPU。

答案 2 :(得分:-2)

限制CPU使用率是一种不好的做法。你做错了什么,修理它而不是解决它。

你说:

  

有时我错误地将内容和计算机加载到内存中   停止响应;

你错误地认为是什么意思?你应该从错误中吸取教训。

我建议在单独的thread中运行繁重的处理部分,以便您的脚本不会停止响应。