在 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() 开销?的主要内容,如果未能解决你的问题,请参考以下文章

在Python中计算数组元素[重复]

在python中计数最高的打印件

如何在应用程序中计费

在 ngFor 中计数 - Angular 2

如何在 Hadoop 中计数? [复制]

如何知道在 C++ 中计算算法的执行时间?