【发布时间】:2010-09-30 12:56:15
【问题描述】:
我正在 Ubuntu 上用 Python 开发一个应用程序,我正在使用子进程从 python 中运行外部二进制文件。由于这些二进制文件是在运行时生成的并且可能会变得不正常,因此我需要严格控制这些二进制文件的内存占用量和运行时间。有没有办法可以在运行时限制或监控这些二进制程序的内存使用情况?为此,我真的很讨厌在子进程中使用“ps”之类的东西。
【问题讨论】:
标签: python subprocess
我正在 Ubuntu 上用 Python 开发一个应用程序,我正在使用子进程从 python 中运行外部二进制文件。由于这些二进制文件是在运行时生成的并且可能会变得不正常,因此我需要严格控制这些二进制文件的内存占用量和运行时间。有没有办法可以在运行时限制或监控这些二进制程序的内存使用情况?为此,我真的很讨厌在子进程中使用“ps”之类的东西。
【问题讨论】:
标签: python subprocess
您可以使用 Python 的 resource 模块在生成子进程之前设置限制。
对于监控,resource.getrusage() 将为您提供所有子流程的汇总信息;如果你想查看每个子进程的信息,你可以在其他注释中使用 /proc 技巧(不可移植但有效),或者在每个子进程之间分层一个 Python 程序并找出一些通信(便携,丑陋,温和有效)。
【讨论】:
拥有子进程的 PID 号,您可以从 proc file-system 读取所有信息。使用:
/proc/[PID]/smaps(从 Linux 2.6.14) 此文件显示每个进程映射的内存消耗。 每个映射都有一个系列 行数如下:
或
/proc/[PID]/statm 提供有关内存使用情况的信息,以页为单位。
或者,您可以限制子进程可以获取的资源:
subprocess.Popen('ulimit -v 1024; ls', shell=True)
当达到给定的虚拟内存限制时,进程因内存不足而失败。
【讨论】: