我有一个Python命令行程序,需要一段时间才能完成。我想知道完成跑步所需的确切时间。
我看过timeit模块,但它似乎只适用于小代码片段。我想给整个节目计时。
我有一个Python命令行程序,需要一段时间才能完成。我想知道完成跑步所需的确切时间。
我看过timeit模块,但它似乎只适用于小代码片段。我想给整个节目计时。
当前回答
我使用来自ttictoc的tic和toc。
pip install ttictoc
然后可以在脚本中使用:
from ttictoc import tic,toc
tic()
# foo()
print(toc())
其他回答
我看过timeit模块,但它似乎只适用于小代码片段。我想给整个节目计时。
$ python -mtimeit -n1 -r1 -t -s "from your_module import main" "main()"
它运行一次your_module.main()函数,并使用time.time()函数作为计时器打印经过的时间。
要在Python中模拟/usr/bin/time,请参阅带有/usr/bin/time:如何捕获计时信息但忽略所有其他输出?的Python子进程?。
要测量每个函数的CPU时间(例如,不要包括time.sleep()期间的时间),可以使用profile模块(Python 2上的cProfile):
$ python3 -mprofile your_module.py
如果您想使用与配置文件模块相同的计时器,可以将-p传递给上面的timeit命令。
请参见如何评测Python脚本?
对于使用Jupyter笔记本的数据人员
在单元格中,可以使用Jupyter的%%time魔术命令来测量执行时间:
%%time
[ x**2 for x in range(10000)]
输出
CPU times: user 4.54 ms, sys: 0 ns, total: 4.54 ms
Wall time: 4.12 ms
这将仅捕获特定单元的执行时间。如果您想捕获整个笔记本(即程序)的执行时间,可以在同一目录中创建一个新笔记本,并在新笔记本中执行所有单元格:
假设上面的笔记本名为example_notebook.ipynb。在同一目录中的新笔记本中:
# Convert your notebook to a .py script:
!jupyter nbconvert --to script example_notebook.ipynb
# Run the example_notebook with -t flag for time
%run -t example_notebook
输出
IPython CPU timings (estimated):
User : 0.00 s.
System : 0.00 s.
Wall time: 0.00 s.
我定义了以下Python装饰器:
def profile(fct):
def wrapper(*args, **kw):
start_time = time.time()
ret = fct(*args, **kw)
print("{} {} {} return {} in {} seconds".format(args[0].__class__.__name__,
args[0].__class__.__module__,
fct.__name__,
ret,
time.time() - start_time))
return ret
return wrapper
并将其用于函数或类/方法:
@profile
def main()
...
在Linux或Unix中:
$ time python yourprogram.py
在Windows中,请参阅StackOverflow问题:如何在Windows命令行上测量命令的执行时间?
对于更详细的输出,
$ time -v python yourprogram.py
Command being timed: "python3 yourprogram.py"
User time (seconds): 0.08
System time (seconds): 0.02
Percent of CPU this job got: 98%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.10
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 9480
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 1114
Voluntary context switches: 0
Involuntary context switches: 22
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
这是获取程序运行时间的最简单方法:
在程序末尾编写以下代码。
import time
print(time.clock())