呼唤time.sleep()是将 Python 代码暂停一定秒数的最快方法。对于异步代码,请使用asyncio.sleep(),并且对于线程或 GUI 更喜欢非阻塞等待,以便您的应用程序保持响应。
选项 1:在同步代码中使用 time.sleep()
步骤一:导入时间模块。
import time步骤2:通过调用暂停执行time.sleep(seconds).
print("Starting...")
time.sleep(2) # sleep for 2 seconds
print("Done.")步骤3:传递一个 float 来睡眠亚秒级延迟。
time.sleep(0.1) # 100 milliseconds第4步:在循环内插入睡眠以限制速率工作,例如轮询或 API 调用。
for _ in range(5):
print("Tick")
time.sleep(1)第5步:避免打电话time.sleep()在 GUI 的主线程中或异步事件循环内;使用以下选项来防止冻结。
选项 2:在异步函数中使用 asyncio.sleep()
步骤一:定义一个等待的异步函数asyncio.sleep()而不是阻塞。
import asyncio
async def work():
print("Hello ...")
await asyncio.sleep(1)
print("... world!")步骤2:运行协程asyncio.run()因此事件循环在等待时保持响应。
asyncio.run(work())步骤3:安排多个任务同时等待以获得更好的吞吐量。
import asyncio
async def step(name, delay):
await asyncio.sleep(delay)
print(f"{name} done")
async def main():
t1 = asyncio.create_task(step("A", 1))
t2 = asyncio.create_task(step("B", 2))
t3 = asyncio.create_task(step("C", 3))
await t1
await t2
await t3
asyncio.run(main())选项 3:使用 Event.wait() 来响应线程延迟
对于线程,等待事件可以立即关闭并避免等待阻塞睡眠完成。查看事件对象文档.
步骤一:创建一个threading.Event()工作线程可以等待超时。
import threading
import time
stop = threading.Event()步骤2:在每个工人中,更换time.sleep()和stop.wait(timeout)因此线程在收到信号时可以立即退出。
def worker():
while not stop.is_set():
print("working...")
# Wait up to 1s, but return early if stop is set
stop.wait(1)步骤3:启动工作线程并设置事件以干净地停止它。
t = threading.Thread(target=worker, name="worker-1")
t.start()
time.sleep(3)
stop.set()
t.join()选项 4:在 Tkinter 中安排延迟而不冻结 UI
在 Tkinter 中,使用小部件的after(ms, callback)稍后运行代码而不阻塞事件循环的方法。 Tkinter 中列出了方法文档.
步骤一:创建根窗口和您需要的任何 UI。
import tkinter as tk
root = tk.Tk()
root.geometry("300x150")步骤2:安排回调root.after(delay_ms, func)而不是使用time.sleep().
def delayed():
print("Ran after 2 seconds")
root.after(2000, delayed)步骤3:启动事件循环,以便 UI 在等待时保持交互。
root.mainloop()快速提示
time.sleep()仅阻塞当前线程;其他线程继续运行。- 例如,使用浮点数表示秒的小数部分
time.sleep(0.25). - 更喜欢
asyncio.sleep()里面的异步代码和Event.wait()在线程服务中用于快速关闭。 - 在 GUI 应用程序中,使用计时器安排工作(例如,Tkinter
after)以防止窗户结冰。
选择与您的运行时匹配的睡眠原语:同步、异步、基于线程或 GUI。您将获得所需的延迟,而不会阻塞应用程序中必须保持响应的部分。






