多线程脚本如何实现无性能损耗的无限休眠?
优雅实现Python多线程脚本的无限休眠
针对你在多线程脚本末尾需要添加低性能消耗无限休眠的需求,我来拆解下常见方案的优缺点,再给个更靠谱的解决思路:
常见方案及各自痛点
短休眠循环:
用while True: time.sleep(1)确实能实现需求,每秒唤醒一次的性能开销几乎可以忽略,但写法确实显得不够简洁优雅,有种“为了凑循环而循环”的生硬感。超长时长休眠:
尝试time.sleep(4000000)这类超大数值的问题在于,你没法确定time.sleep()能接受的最大参数——Python3里的sys.maxsize数值过大,直接传入可能导致参数被截断或者抛出异常,而且硬编码一个超大数字也不够灵活,哪天这个时长不够用了还得改代码。signal.pause():
这个方法在Unix/Linux系统上非常优雅,会一直阻塞到收到信号才退出,但它的致命问题是仅支持Unix类系统,Windows环境下完全无法使用,兼容性大打折扣。
更优雅的跨平台方案
其实你可以用threading模块的Event对象来实现无性能损耗的永久阻塞:
import threading # 创建一个永远不会被触发的事件 stop_event = threading.Event() # 等待事件触发——因为永远不会触发,所以会一直阻塞在这里 stop_event.wait()
这个方法的优势很明显:
- 完全跨平台,Windows和Unix系统都能正常工作
- 没有定期唤醒的开销,线程会进入真正的休眠状态,几乎不占用CPU资源
- 代码写法简洁优雅,逻辑清晰(如果后续需要主动退出休眠,只需要调用
stop_event.set()即可)
内容的提问来源于stack exchange,提问作者WoJ
相关产品推荐
相关产品推荐

