Python中实现时间延迟的方法

Python中实现时间延迟的方法

技术背景

在Python编程中,我们经常会遇到需要程序暂停一段时间的场景,例如模拟现实中的等待过程、控制程序的执行速度、定时执行任务等。实现时间延迟是解决这些问题的关键。

实现步骤

1. 使用time.sleep()函数

这是最常见的实现时间延迟的方法,它可以让程序暂停执行指定的秒数。

1
2
3
4
5
6
7
8
9
import time

# 延迟2.5秒
time.sleep(2.5)

# 示例:每隔一分钟打印一次信息
while True:
print("This prints once a minute.")
time.sleep(60)

2. 使用threading.Timer对象

可以在单独的线程中触发函数在稍后的时间执行。

1
2
3
4
5
6
7
8
from threading import Timer

def party_time():
print('hooray!')

# 3秒后执行party_time函数
t = Timer(3, party_time, args=None, kwargs=None)
t.start()

3. 使用asyncio.sleep()(Python 3.4及以上版本)

适用于异步编程场景。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import asyncio
from datetime import datetime

@asyncio.coroutine
def countdown(iteration_name, countdown_sec):
while countdown_sec > 0:
print(f'{iteration_name} iterates: {countdown_sec} seconds')
yield from asyncio.sleep(1)
countdown_sec -= 1

loop = asyncio.get_event_loop()
tasks = [asyncio.ensure_future(countdown('First Count', 2)),
asyncio.ensure_future(countdown('Second Count', 3))]

start_time = datetime.utcnow()

# 运行任务
loop.run_until_complete(asyncio.wait(tasks))

loop.close()

print(f'total running time: {datetime.utcnow() - start_time}')

4. 在Tkinter中使用after()方法

如果使用Tkinter创建图形用户界面,不要使用time.sleep(),应使用after()方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import tkinter as tk

root = tk.Tk()

print('Hello')

def ohhi():
print('Oh, hi!')

# 5000毫秒(即5秒)后执行ohhi函数
root.after(5000, ohhi)

print('Bye')

root.mainloop()

最佳实践

  • 单线程延迟:如果只是简单的延迟,使用time.sleep()是最简单和直接的方法。
  • 异步编程延迟:在异步编程中,使用asyncio.sleep()可以避免阻塞事件循环,提高程序的并发性能。
  • Tkinter应用:在Tkinter应用中,使用after()方法来实现延迟,以避免界面冻结。

常见问题

1. time.sleep()的精度问题

在Windows系统中,time.sleep()的最佳精度约为0.015秒(15毫秒);在现代处理器上的大多数Linux版本中,可以达到0.001秒(1毫秒)的精度。

2. threading.Timer重复使用问题

threading.Timer对象只能启动一次,如果需要重复使用,需要重新创建对象。

3. asyncio.sleep()的使用限制

asyncio.sleep()必须在异步事件循环中使用,并且需要使用await关键字。


Python中实现时间延迟的方法
https://119291.xyz/posts/2025-04-14.python-time-delay-implementation/
作者
ww
发布于
2025年4月14日
许可协议