python统计外部程序的最大内存占用数问题

2013-03-08 21:38:01 +08:00
 ma6174
最近在用python做一个ACM在线测试系统的后台评判程序,用户提交代码(可能有C/C++/JAVA)之后,我们在服务器(Linux系统)上进行编译,然后运行,一个很重要的问题就是获得程序的执行时间和程序的最大内存占用率。由于C/C++程序执行很快,大部分程序不到1秒就执行完了,最快的可能执行时间不超过1毫秒。
检测运行时间容易,检测内存我就不知道如何办了。原来用过一个方法,就是用python的subprocess运行用户程序,得到pid,然后用glan模块去循环检测内存占用率,对比得到最大内存占用率。这样做对于执行时间长点的程序还行,但是对于执行时间很短的程序就检测不到了,用户的程序在我启动检测程序之前就结束了。
想问问各位大神,有没有其他好的方法检测这样的程序的最大内存占用率?或者说有没有方法定时阻塞外部程序的执行然后再检测?再或者说如果用GDB调试的话能用python去控制和检测吗?
3657 次点击
所在节点    Python
8 条回复
lynx
2013-03-08 21:58:58 +08:00
https://github.com/lodevil/Lo-runner
这个是C写的python扩展
可以精确获取程序运行的时间、内存消耗,安全方面可以限定程序的系统调用和文件访问

这个是一个例子:
https://github.com/lodevil/Lo-runner/blob/master/demo/test.py
adieu
2013-03-08 22:04:31 +08:00
可以看看这个脚本 https://github.com/pixelb/scripts/blob/master/scripts/ps_mem.py

可能可以借鉴里面的办法
lynx
2013-03-08 22:55:58 +08:00
ACM测评需要做到很精确,你只用python不可能做到这一点的
hfeeki
2013-03-08 23:21:18 +08:00
简单点,从文件里面读取。 从 /proc/ 目录下面读取,cpu,mem 等等信息都有,这是很多相关工具的通用做法。
ma6174
2013-03-09 12:30:03 +08:00
感谢各位!一楼的程序很好!再封装一下就可以了!谢谢!
josephshen
2013-03-09 12:48:12 +08:00
psutil 完爆这种需求
lynx
2013-03-09 21:37:28 +08:00
读取/proc相关信息的想法这个就放弃吧,psutil之类都别想了
可能调用的时候你要判定的程序已经跑完了
ACM的程序很多在1毫秒内跑完的
clowwindy
2013-03-09 21:52:47 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/62358

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX