Python sleep() 函数

2024 年 8 月 29 日 | 阅读 6 分钟

引言

在编写 Python 代码时,有时可能需要将程序的执行暂停指定的时间。这时,`sleep()` 函数就非常有用。

`sleep()` 方法会暂停(等待)当前线程的执行指定的时长。

Python 包含一个 `time` 模块,它提供了许多有用的函数来管理与时间相关的任务。`sleep()` 是其中一项常用功能。为了在一定秒数内停止程序的运行,我们可以在 Python 中使用 `sleep()` 函数。请记住,Python `time.sleep()` 函数只会暂停当前线程的执行,而不会暂停整个程序。

语法

`sleep()` 函数的语法很简单。`sleep()` 函数的使用方法如下:

time.sleep(seconds)

`sleep()` 函数需要一个参数:`seconds`。此参数决定了暂停程序执行的秒数。`seconds` 参数可以是浮点数,这意味着您也可以暂停程序执行不足一秒的时间。

Python sleep() 函数示例

示例 1

代码

输出

" Printed time immediately " is printed
Suspends (Delays) execution for 2.5 seconds.
" Printed after 2.5 seconds" is printed ".

上述示例表明 `sleep()` 接受浮点整数作为输入。在 Python 3.5 之前,暂停时间实际上可能比传递给 `time()` 方法的值还要短。

从 Python 3.5 开始,暂停时间至少为设定的秒数。Python 3.5 的核心开发人员对 `time.sleep()` 的行为进行了微调。即使 `sleep` 被信号中断,新的 Python `sleep()` 系统也会至少持续我们选择的秒数。但是,如果消息本身产生异常,则此规则不适用。

示例 2:创建数字时钟

代码

输出

02:10:50 PM
02:10:51 PM
02:10:52 PM
02:10:53 PM
02:10:54 PM

在上面程序的无限 `while` 循环中,我们计算并报告了当前的本地时间。然后程序等待一整秒。再次计算并打印当前本地时间。这个过程会继续下去。

使用 sleep() 进行计时和延迟:示例和用例

在许多情况下,您可能需要使用 `sleep()` 函数在程序中引入延迟。以下是几个示例:

1. 延迟函数执行

假设您有一个需要像时钟一样运行的函数。您可以使用 `sleep()` 函数在函数调用之间引入延迟。这是一个示例:

代码

输出

Pauses the program execution for 10 seconds.

在此示例中,我们定义了一个名为 `func()` 的函数,需要像时钟一样运行它。然后,我们使用一个时间循环反复调用该函数,并使用 `sleep()` 函数将程序执行暂停 10 秒。

3. 在网络请求之间添加延迟

假设您有一个向 API 发起网络请求的程序。如果您发送请求的速度过快,可能会使服务器过载并导致其崩溃。为防止这种情况,您可以使用 `sleep()` 函数在网络请求之间引入延迟。

代码

输出

Pauses the program execution for 5 seconds

在此示例中,我们使用 `requests` 库向 API 发起网络请求。然后,我们处理响应,并使用 `sleep()` 函数将程序执行暂停 5 秒。

3. 使用 sleep() 处理中断和异常

使用 `sleep()` 函数时需要注意的一点是,它可能会被某些信号中断,例如键盘中断(在大多数系统中是 CTRL+C)。如果程序在睡眠期间发生键盘中断,程序将中断,可能无法按预期继续。为了使用 `sleep()` 函数处理中断和异常,您可以使用 `try/except` 块。

代码

在此示例中,我们使用 `try/except` 块来捕获可能发生的 `KeyboardInterrupt` 异常,以防用户在程序睡眠时按下 CTRL+C。如果检测到键盘中断,程序将打印一条消息并退出。

Python 多线程

在讨论多线程系统中的 `sleep()` 之前,我们先来谈谈进程和线程。在某些情况下,我们希望为线程提供 Python `sleep()` 函数。也许我们正在使用一个包含数百万个文档的生产数据库和一个迁移脚本。

我们选择使用线程,因为我们不希望产生任何停机时间,但我们确实不希望迁移花费比必需更长的时间。

计算机程序中的每个指令都是一个独立的单元。这些指令的执行构成了一个进程。线程是进程的一部分。一个进程可以有一个或多个线程。

示例 1:Python 多线程

这是一个具有多个线程的 Python 程序示例。

代码

输出

Hola
Hola
Hey
Hola
Hey
Hey

上面的代码有两个线程,`th1` 和 `th2`。使用 `th1.start()` 和 `th2.start()` 来启动这些线程。请记住,`th1` 和 `th2` 可能并行运行并产生不同的结果。

示例 2:Python 多线程程序中的 time.sleep()

代码

输出

0
100
>>> 1
2
3
4
5
101
6
7
8
9
10
102

Python 中用于时间敏感活动的 sleep() 替代方案

虽然 `sleep()` 函数有助于在程序的执行中引入延迟,但它可能并非对所有基于时间的任务都是最佳选择。以下是一些可以考虑的替代方案:

Sched

`sched` 模块为在指定时间运行函数提供了通用的事件调度器。

threading.Timer

`threading` 模块中的 `Timer` 类允许您在预定义的延迟后调度函数的执行。

asyncio.sleep

`asyncio` 库中的 `sleep()` 函数提供了与 `sleep()` 类似的功能,但以异步和非阻塞的方式。

结论

总之,`sleep()` 函数是为 Python 程序执行引入延迟的有用工具。它允许您将程序执行暂停预定的秒数,并可用于各种情况,例如延迟函数执行或在网络请求之间添加延迟。

在使用 `sleep()` 函数时,至关重要的是使用 `try/except` 块处理中断和异常,以防止程序意外崩溃。此外,您应该考虑使用可选库来满足更复杂的并发和计时需求。总而言之,`sleep()` 函数是任何 Python 开发者工具箱中一个重要的工具。