在 python 中计时时,我应该如何考虑 subprocess.Popen() 开销?
Posted
技术标签:
【中文标题】在 python 中计时时,我应该如何考虑 subprocess.Popen() 开销?【英文标题】:How should I account for subprocess.Popen() overhead when timing in python? 【发布时间】:2011-11-25 12:26:59 【问题描述】:编码社区的智能成员比我多!我有一个 Python 问题要问大家... :)
我正在尝试优化一个 python 脚本,该脚本(除其他外)返回子进程执行和终止的挂钟时间。我想我很接近这样的事情。
startTime = time.time()
process = subprocess.Popen(['process', 'to', 'test'])
process.wait()
endTime = time.time()
wallTime = endTime - startTime
但是,我担心subprocess.Popen()
中的开销会夸大我在旧平台和异国平台上的结果。我的第一个倾向是通过运行一个简单的无害命令以某种方式计算subprocess.Popen()
引起的开销。比如linux上的如下。
startTime = time.time()
process = subprocess.Popen(['touch', '/tmp/foo'])
process.wait()
endTime = time.time()
overheadWallTime = endTime - startTime
或者windows上的以下内容。
startTime = time.time()
process = subprocess.Popen(['type', 'NUL', '>', 'tmp'])
process.wait()
endTime = time.time()
overheadWallTime = endTime - startTime
那么,在 python 中计时时,我应该如何考虑subprocess.Popen()
开销?
或者,从subprocess.Popen()
采样开销的无害方法是什么?
或者,也许我还没有考虑到一些事情?
需要注意的是,解决方案必须合理地跨平台。
【问题讨论】:
【参考方案1】:欢迎来到batteries included。
【讨论】:
啊,是的,我在搜索中确实遇到了这个问题。如果我错了,请纠正我,但看起来这是为了在 cpu 利用率 中分析 python 程序。它看起来对我不起作用,因为我想要 挂钟时间 中的任何二进制文件。对吗? perden:我认为没有任何可靠的通用二进制分析器。如果我可以问,它是什么语言? 要测试的二进制文件可以用任何种类的语言编写,包括 C、C++ 和(快门)Fortran。我并不十分担心要准确到指令级别(毕竟我正在寻找挂钟时间),但是使用脚本语言创建子进程有一些开销,特别是在旧平台上,我想我会采取努力适应。 @perden:啊,如果我理解正确的话,您并不是在分析代码,只是对可执行文件的运行时间感兴趣。或许可以制作一个由 Unix 的time
、Windows timeit
和 Popen 组成的解决方案作为最后的手段?以上是关于在 python 中计时时,我应该如何考虑 subprocess.Popen() 开销?的主要内容,如果未能解决你的问题,请参考以下文章