检查Python中子进程的内存使用情况
我正在 Ubuntu 上用 Python 开发一个应用程序,并且使用子进程从 python 中运行外部二进制文件。由于这些二进制文件是在运行时生成的,并且可能会变得异常,因此我需要严格控制这些二进制文件的内存占用量和运行时间。有什么办法可以限制或监视这些二进制程序在运行时的内存使用情况吗?我真的很讨厌在子进程中使用像“ps”这样的东西来达到这个目的。
I'm developing an application in Python on Ubuntu and I'm running external binaries from within python using subprocess. Since these binaries are generated at run time and can go rogue, I need to keep a strict tab on the amount of memory footprint and runtime of these binaries. Is there someway I can limit or monitor the memory usage of these binary programs at runtime? I would really hate to use something like "ps" in subprocess for this purpose.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用 Python 的 resource 模块在生成子进程之前设置限制。
为了进行监控,resource.getrusage() 将为您提供所有子流程的汇总信息;如果你想查看每个子进程的信息,你可以在其他注释中使用 /proc 技巧(不可移植但有效),或者在每个子进程之间分层一个 Python 程序并找出一些通信(可移植、丑陋、稍微有效) )。
You can use Python's resource module to set limits before spawning your subprocess.
For monitoring, resource.getrusage() will give you summarized information over all your subprocesses; if you want to see per-subprocess information, you can do the /proc trick in that other comment (non-portable but effective), or layer a Python program in between every subprocess and figure out some communication (portable, ugly, mildly effective).
有了子进程的 PID 号,您可以从 proc 文件系统读取所有信息。使用:
或
或者,您可以限制子进程可以获取的资源:
当达到给定的虚拟内存限制时,进程会因内存不足而失败。
Having a PID number of your subprocess you can read all info from proc file-system. Use:
or
Alternatively you can limit resources which subprocess can aquire with :
When given virtual memory limit is reached process fails with out of memory.