繁体   English   中英

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

[英]How to limit memory and CPU usage in Python under Windows?

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

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

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

但是我想,一个简单的解决方案是使用Docker创建托管环境,而无需经历所有编码麻烦。

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

如果主要问题是整个系统停止运行,则可以创建一个监视程序,以防止该情况发生并终止该进程。 它有点笨拙,不如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。

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

你说:

有时我会错误地将太多的内容加载到内存中,并且计算机停止响应;

你到底是什么意思呢? 您应该从错误中学习。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM