如何检查 Python 脚本的执行时间?

2025年1月5日 | 阅读6分钟

引言

time 模块可用于确定 Python 脚本的执行时间。首先在脚本开头导入它。接下来,使用 time.time() 在要测量代码块之前记录开始时间,并在该块之后记录结束时间。要找到执行时间,请计算开始时间和结束时间之间的差值。最后,记录或发布结果。使用此技术,您可以分析代码的性能并进行必要的优化,从而确保有效的执行。

许多 Python 模块,例如 time、timeit 和 datetime,都能够存储特定程序段运行的时间。通过调整或获取该段完成时的开始时间和结束时间之间的差值,我们可以确定完成该段所需的时间。

计算时间差的技术

可以使用以下技术计算时间差

  • Python time 模块是位于通用实用模块中的一组与时间相关的函数。它提供的 time.time() 函数以秒为单位检索自 epoch 以来的时间。epoch 通常指 1970 年 1 月 1 日。然而,不同系统处理闰秒的方式不同,这会影响结果的精度。闰秒(为了使原子时与天文时保持一致而进行的调整)的处理方式因底层系统而异。因此,虽然 time.time() 提供了一种检索时间信息的简单方法,但其相对于闰秒的准确性可能因系统而异。
  • Python datetime 包引入了用于组织日期和时间的函数。其 now() 函数位于模块深处,是查找当前本地日期和时间的宝贵资源。调用时,它会返回一个表示当前时间的 datetime 对象。此对象包含年、月、日、小时、分钟、秒和微秒等详细信息。借助 now(),开发人员可以轻松地将实时时间戳集成到他们的程序中,从而可以轻松地执行计划操作、记录事件以及为 Python 环境内的报告和分析收集时间数据。
  • Python timeit 模块通过将代码片段运行指定的次数(默认 1,000,000 次)来执行详尽的代码性能评估。这种长时间的迭代确保了统计上显著的计时测量,从而提高了执行时间评估的精度。timeit 通过反复执行代码来减少系统负载或资源变化等外部因素的影响。

这有助于开发人员就其代码的效率做出更明智的决定,支持优化工作,并鼓励以性能为导向的开发方法。

使用 time 模块检查 Python 执行时间

通过记录代码段的开始和结束时间来计算其持续时间

使用时间戳,开发人员经常跟踪代码段的开始和结束时间以确定其持续时间。必须使用 Python 中的 time 模块或 datetime 模块在代码段执行之前和之后记录当前时间。通过减去开始和结束时间可以计算出已用时间。通过此方法,可以精确测量代码执行时间,从而更轻松地分析、优化和微调软件应用程序的关键部分。

示例

输出

Duration: 0.0776059627532959 seconds

说明

上面的 Python 代码示例通过使用 time 模块精确计算了代码段的持续时间。首先使用 time.time() 记录当前时间并将其分配给 start_time。在执行了指定代码段后,代码会迭代一个 for 循环一百万次。一旦代码段结束,它就会捕获当前时间并将其保存在 end_time 中。通过从 end_time 中减去 start_time,代码确定自代码段开始以来经过的时间。在优化和改进方面,通过以秒为单位打印此长度,开发人员获得了对其代码性能特征至关重要的信息。

通过累加每次迭代所需的时间来测量代码段的耗时

在确定代码段的总耗时时,会记录代码段执行之前的开始时间,并在每次迭代后计算经过的时间。此技术提供了对代码性能更细粒度的视图,对于重复运行的代码段尤其有用。通过逐步累加每次迭代所需的时间,开发人员可以全面了解代码在多次执行中的效率变化。此方法可以识别潜在的代码瓶颈或可能受益于优化的区域,最终可以生成响应更快、效率更高的软件。

示例

输出

Total duration: 0.22059369087219238 seconds
Overall duration: 0.8168423175811768 seconds

说明

此 Python 代码演示了如何通过累加每次迭代所需的时间来计算代码段的持续时间。total_duration 变量被初始化,并且迭代次数在开始时设置为 1,000,000。在执行循环之前,脚本会记录开始时间。通过迭代指定的范围,循环会记录每次迭代的开始和结束时间。接下来,它确定每次迭代的持续时间,并将其添加到 total_duration 变量中。完成所有迭代后,脚本会记录最终时间。通过减去开始和结束时间来确定总持续时间。最后,打印 overall_duration(整个循环的总耗时)和 total_duration(各种迭代持续时间的总和),从而提供对代码段性能的见解。

使用 DateTime 模块检查执行时间

要验证代码段的执行时间,请使用 DateTime 模块在代码段执行之前和之后记录当前时间。首先,导入名为 datetime 的模块。接下来,在代码段之前使用 datetime.datetime.now() 捕获开始时间。在执行结束时做出类似的记录。通过减去开始和结束时间可以计算出持续时间。借助 datetime 的微秒精度,此方法可以精确测量代码执行时间。datetime 除了简单的计时功能外,还提供了用于管理日期、时间和时间间隔的功能,从而为时间相关过程提供了灵活性。

示例

输出

Duration: 0:00:00.168564

说明

此 Python 代码使用 DateTime 模块计算代码段的执行时间。首先,它使用 datetime 捕获函数运行之前的当前时间。datetime.now() 存储在 start_time 中。代码段运行后,代码再次获取当前时间并将其分配给 end_time(在此示例中由 for 循环表示)。通过从 start_time 中减去 end_time,代码确定代码段运行了多长时间。获得的长度提供了关于代码性能的有价值信息,使工程师能够评估其有效性。此方法使性能优化工作更加轻松,并提供非常准确的时间测量。

使用 timeit 模块检查执行时间

Python timeit 模块通过多次运行代码并平均结果来减少变异性,从而更精确地测量代码执行时间。首先导入 timeit 模块。接下来,在对 timeit.timeit() 函数的调用中包含要测量的代码段以及重复和迭代的次数。通过此策略可以获得统计上重要的计时测量。timeit 还提供了一个 Timer 类,用于更精确的计时控制。通过获得精确的计时信息,开发人员可以查明性能瓶颈并有效地调整他们的代码,以提高应用程序的整体效率和响应能力。

输出

Execution time: 0.12642394900001364 seconds

说明

此 Python 示例使用 timeit 模块精确测量了代码段的执行时间。代码段包含在 code_to_measure 变量中,此处用 for 循环表示。使用 timeit.timeit() 函数运行了代码段一次(number=1),并确定了执行时间。此方法平均多次执行以确保统计相关性。最后打印测量到的执行时间。开发人员可以使用 timeit 获得对其代码性能的精确洞察,这有助于优化工作以提高响应能力和效率。通过定位和解决性能瓶颈,此方法最终提高了整个软件程序的质量。