我经常使用 Jupyter/IPython,并且习惯于%%time
在每个单元格前面包含魔术命令,以了解所花费的 CPU 量和挂钟时间。
有没有一种简单的方法可以从脚本中获得相同的测量值?
更具体地说,我想要这样的东西:
results = measure_times(something_possibly_parallel)
print results.wall_clock, results.cpu_user, results.cpu_total
我经常使用 Jupyter/IPython,并且习惯于%%time
在每个单元格前面包含魔术命令,以了解所花费的 CPU 量和挂钟时间。
有没有一种简单的方法可以从脚本中获得相同的测量值?
更具体地说,我想要这样的东西:
results = measure_times(something_possibly_parallel)
print results.wall_clock, results.cpu_user, results.cpu_total
您可以将所需的measure_times()
实用程序实现为 python上下文管理器。那么用法如下:
with measure_times("block name"):
your code here
仅测量挂时间的示例实现如下:
$ cat measure_times.py
import timeit
class measure_times:
def __init__(self, blockname):
self.blockname = blockname
def __enter__(self):
self.starttime = timeit.default_timer()
def __exit__(self, exc_type, exc_value, traceback):
t = timeit.default_timer() - self.starttime
print('--- Time measurement report: {}: {}s'.format(self.blockname, t))
with measure_times("Integer sum"):
s = 0
for i in range(1000000):
s += i
print(s)
with measure_times("Floating point sum"):
s = 0
for i in range(1000000):
s += i
print(s)
$ python measure_times.py
499999500000
--- Time measurement report: Integer sum: 0.0683062076569s
499999500000
--- Time measurement report: Floating point sum: 0.066034078598s