Python 睡眠函数:如何为代码添加延迟
已发表: 2022-12-01本教程将教您如何使用 Python 内置时间模块中的 sleep() 函数为代码添加时间延迟。
当您运行一个简单的 Python 程序时,代码执行是按顺序发生的——一条语句接一条语句——没有任何时间延迟。 但是,在某些情况下您可能需要延迟代码的执行。 Python 内置时间模块中的sleep()
函数可以帮助您做到这一点。
在本教程中,您将学习在 Python 中使用sleep()
函数的语法和几个示例以了解其工作原理。 让我们开始吧!
Python time.sleep() 的语法
内置于 Python 标准库中的time
模块提供了几个有用的与时间相关的函数。 第一步,将time
模块导入您的工作环境:
import time
由于sleep()
函数是time
模块的一部分,您现在可以通过以下通用语法访问和使用它:
time.sleep(n)
这里, n
是睡眠的秒数。 它可以是整数或浮点数。
有时所需的延迟可能是几毫秒。 在这些情况下,您可以将以毫秒为单位的持续时间转换为秒,并在调用睡眠函数时使用它。 例如,如果要引入 100 毫秒的延迟,可以将其指定为 0.1 秒: time.sleep(0.1)
。
您还可以仅从time
模块导入sleep
功能:
from time import sleep
如果您使用上述方法进行导入,则可以直接调用sleep()
函数——无需使用time.sleep()
。
现在您已经了解了 Python sleep()
函数的语法,让我们编写示例代码以查看该函数的运行情况。 您可以从此 GitHub 存储库中的 python-sleep 文件夹下载本教程中使用的 Python 脚本。
使用 sleep() 延迟代码执行
作为第一个示例,让我们使用 sleep 函数来延迟执行一个简单的 Python 程序。

在以下代码片段中:
- 第一个
print()
语句立即执行。 - 然后我们使用
sleep()
函数引入 5 秒的延迟。 - 第二个
print()
语句将仅在睡眠操作完成后执行。
# /python-sleep/simple_example.py import time print("Print now") time.sleep(5) print("Print after sleeping for 5 seconds")
现在运行simple_example.py
文件并观察输出:
$ python3 simple_example.py
向代码块添加不同的延迟
在前面的示例中,我们在执行两个print()
语句之间引入了 5 秒的固定延迟。 接下来,让我们编写另一个示例,以在循环遍历可迭代对象时引入不同的延迟时间。
在这个例子中,我们想做以下事情:
- 遍历一个句子,访问每个单词,然后打印出来。
- 打印出每个单词后,我们希望等待一段特定的时间——然后再打印出句子中的下一个单词。
循环遍历一串字符串
考虑字符串sentence
。 它是一个字符串,其中每个单词本身就是一个字符串。
如果我们遍历字符串,我们将得到每个字符,如下所示:
>>> sentence = "How long will this take?" >>> for char in sentence: ... print(char) # Output (truncated for readability) H o w . . . t a k e ?
但这不是我们想要的。 我们想遍历句子并访问每个单词。 为此,我们可以在sentence
字符串上调用split()
方法。 这将返回一个字符串列表——通过拆分sentence
字符串获得——包含所有出现的空格。
>>> sentence.split() ['How', 'long', 'will', 'this', 'take?'] >>> for word in sentence.split(): ... print(word) # Output How long will this take?
循环遍历具有不同延迟的可迭代对象
让我们重温一下这个例子:
-
sentence
是我们想要循环访问每个单词的字符串。 -
delay_times
是我们将在每次循环期间用作sleep()
函数参数的延迟时间列表。
这里我们想同时循环遍历两个列表: delay_times
列表和拆分sentence
字符串得到的字符串列表。 您可以使用zip()
函数来执行此并行迭代。
Python zip() 函数:zip(list1, list2) 返回一个元组迭代器,其中每个元组包含 list1 和 list2 中索引 i 处的项目。
# /python-sleep/delay_times.py import time sleep_times = [3,4,1.5,2,0.75] sentence = "How long will this take?" for sleep_time,word in zip(sleep_times,sentence.split()): print(word) time.sleep(sleep_time)
如果没有睡眠功能,控件将立即进行下一次迭代。 因为我们引入了延迟,下一次循环只有在睡眠操作完成后才会发生。
现在运行delay_times.py
并观察输出:
$ python3 delay_times.py
字符串中的后续单词将在延迟后打印出来。 打印出字符串中索引i
处的单词后的延迟是delay_times
列表中索引i
处的数字。
Python 中的倒数计时器
作为下一个示例,让我们用 Python 编写一个简单的倒数计时器。


让我们定义一个函数countDown()
:
# /python-sleep/countdown.py import time def countDown(n): for i in range(n,-1,-1): if i==0: print("Ready to go!") else: print(i) time.sleep(1)
接下来我们来解析countDown()
函数的定义:
- 该函数接受一个数字
n
作为参数,并从该数字n
开始倒数至零。 - 我们使用 time.sleep(1) 在计数之间实现一秒的延迟。
- 当计数达到 0 时,该函数打印出“Ready to go!”。
为了实现倒计时操作,我们使用了负步长值为 -1 的
range()
函数。range(n, -1, -1)
将帮助我们遍历 n、n – 1、n – 2 中的数字范围,依此类推直到零。 回想一下,在使用range()
函数时,终点默认被排除在外。
接下来让我们以 5 作为参数添加对countDown()
函数的调用。
countDown(5)
现在运行脚本countdown.py
并查看countDown
函数的运行情况!
$ python3 countdown.py
多线程中的休眠函数
Python 线程模块提供开箱即用的多线程功能。 在 Python 中,全局解释器锁或 GIL 确保在任何时间点只有一个活动线程在运行。

但是,在I/O操作和睡眠等等待操作期间,处理器可以暂停当前线程的执行,切换到另一个正在等待的线程。
为了理解这是如何工作的,让我们举个例子。
在 Python 中创建和运行线程
考虑以下函数func1()
、 func2()
和func3()
。 他们循环遍历一系列数字并将它们打印出来。 这之后是一个睡眠操作——持续特定的秒数——在每次循环过程中。 我们为每个函数使用了不同的延迟时间,以更好地理解执行如何在线程之间并发切换。
import time def func1(): for i in range(5): print(f"Running t1, print {i}.") time.sleep(2) def func2(): for i in range(5): print(f"Running t2, print {i}.") time.sleep(1) def func3(): for i in range(4): print(f"Running t3, print {i}.") time.sleep(0.5)
在 Python 中,您可以使用Thread()
构造函数来实例化线程对象。 使用语法threading.Thread(target = …, args = …)
创建一个线程,该线程使用args
元组中指定的参数运行target
函数。
在此示例中,函数func1
、 func2
和func3
不接收任何参数。 所以只指定函数的名称作为目标就足够了。 然后,我们分别以func1
、 func2
和func3
为目标定义线程对象t1
、 t2
和t3
。
t1 = threading.Thread(target=func1) t2 = threading.Thread(target=func2) t3 = threading.Thread(target=func3) t1.start() t2.start() t3.start()
下面是线程示例的完整代码:
# /python-sleep/threads.py import time import threading def func1(): for i in range(5): print(f"Running t1, print {i}.") time.sleep(2) def func2(): for i in range(5): print(f"Running t2, print {i}.") time.sleep(1) def func3(): for i in range(4): print(f"Running t3, print {i}.") time.sleep(0.5) t1 = threading.Thread(target=func1) t2 = threading.Thread(target=func2) t3 = threading.Thread(target=func3) t1.start() t2.start() t3.start()
观察输出。 执行在三个线程之间发生变化。 线程t3
的等待时间最短,因此挂起的时间最少。 线程t1
的睡眠持续时间最长,为两秒,因此它是最后一个完成执行的线程。
要了解更多信息,请阅读有关 Python 中多线程基础知识的教程。
结论
在本教程中,您学习了如何使用 Python 的sleep()
函数为代码添加时间延迟。
您可以从内置时间模块time.sleep()
访问sleep()
函数。 要将执行延迟 n 秒,请使用time.sleep(n)
。 此外,您还看到了通过不同的值、倒计时和多线程延迟循环中后续迭代的示例。
您现在可以探索时间模块的更多高级功能。 想在 Python 中处理日期和时间吗? 除了时间模块之外,您还可以利用日期时间和日历模块的功能。
接下来,学习用Python计算时差。