【发布时间】:2011-04-28 14:23:24
【问题描述】:
我有一个脚本(它是一个精确的 hadoop pig 脚本),我想从中测量执行时间。我可能计划多次运行测试并将平均/中值时间作为执行时间。
由于手动多次启动脚本可能会很麻烦,所以我想编写一个脚本来运行这些测试。
使用 Python 的 Popen 启动一个执行脚本并测量该进程运行时间的新进程是否是个好主意,比如:
# start timer
p = subprocess.Popen(...)
stdout, stderr = p.communicate()
# end timer
创建一个新流程是否会使时间测量结果出现偏差,或者这种方法是否可行?还有其他建议吗?
最好, 会
【问题讨论】:
-
代替while循环,只需使用
p.communicate()等待进程完成。 (或者p.wait(),如果你不重定向输出。) -
谢谢,如果我的脚本产生大量输出怎么办? p.communicate 会缓冲整个输出,直到它打印出来?有没有办法定期打印部分输出/刷新缓冲区?
-
另外,在 Linux 上,您可以使用 time 命令来对进程的运行量进行基准测试。例如,“time myprog”将运行 myprog 并在最后告诉您它花费了多少时间。
-
检查 my answer here for how to incrementally read stdout/stdin,如果您需要在 Python 中执行此操作,可能会很有用。
标签: python process benchmarking popen