Python 中如何让程序暂停/延时一段时间?

Python 实现延时最常用的方法是 time.sleep()。本文介绍 sleep、异步 asyncio.sleep、以及忙等待方案的区别,并说明各自适用场景。

最佳实践
Python 中如何让程序暂停/延时一段时间?封面

最常用的方法是 time.sleep(秒数):阻塞当前线程指定秒数。如果在 asyncio 异步代码里,必须用 await asyncio.sleep(),否则会阻塞整个事件循环。

方法一:time.sleep()(常规首选)

import time

print("Hello")
time.sleep(2)   # 暂停 2 秒,支持小数如 0.5
print("World")

简单直接,适合脚本和同步代码。注意它是阻塞调用,睡着的线程什么都不干。

方法二:asyncio.sleep()(异步代码专用)

import asyncio

async def main():
    print("Hello")
    await asyncio.sleep(2)   # 不阻塞事件循环,其他协程照常运行
    print("World")

asyncio.run(main())

在协程里写 time.sleep() 是常见错误——它会把整个事件循环卡住,所有并发任务全部停摆。

方法三:忙等待(不推荐)

用循环不断检查时间也能实现延时:

import time

end_time = time.perf_counter() + 2
while time.perf_counter() < end_time:
    pass

缺点是 CPU 占用 100%,除非对精度有极端要求(如某些硬件时序),否则没有理由这么写。

常见问题(FAQ)

Q:time.sleep() 的精度如何?
A:不保证精确,实际休眠时间可能略长(取决于操作系统调度,通常误差在毫秒级)。它保证"至少睡这么久"。

Q:能 sleep 小于 1 秒吗?
A:可以,参数接受浮点数,time.sleep(0.1) 即 100 毫秒。

Q:多线程里 sleep 会互相影响吗?
A:不会。time.sleep() 只挂起调用它的那个线程,其他线程正常运行。

Q:如何定时循环执行某个任务?
A:简单场景可以 while True: do_work(); time.sleep(60);需要注意漂移的话记录下次执行时间点再算 sleep 时长;复杂调度建议用 APScheduler 或系统 cron。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台