python 中time.sleep() 的极限
windows下time.sleep(0.001) 会耗时15ms,最小精确到15ms
ubuntu下time.sleep(0.001)会耗时1ms,最小可精确到0.1ms
windows下解决办法:
QueryPerformanceFrequency是操作系统的性能统计分辨率,也就是每秒钟统计多少次的意思。
QueryPerformanceCounter 是系统性能统计计数器,表示统计了多少次,除以QueryPerformanceFrequency,得到系统运行时间(秒数)。
QueryPerformanceCounter2-QueryPerformanceCounter1,得到高精度(微秒级,=1/QueryPerformanceFrequency秒)的时间差,常用于winddows高精度计时。
QueryPerformanceFrequency() -基本介绍 类型:Win32API 原型:BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency); 作用:返回硬件支持的高精度计数器的频率。 返回值:非零,硬件支持高精度计数器;零,硬件不支持,读取失败。
#!/usr/bin/python3 # -*- coding: utf-8 -*- # 提供了与 C 兼容的数据类型,并允许调用 DLL 或共享库中的函数 import ctypes class Timer(object): def __init__(self): freq = ctypes.c_longlong(0) ctypes.windll.kernel32.QueryPerformanceFrequency(ctypes.byref(freq)) self.__freq = freq.value self.__beginCount = self.counter() def counter(self): freq = ctypes.c_longlong(0) ctypes.windll.kernel32.QueryPerformanceCounter(ctypes.byref(freq)) return freq.value def beginCount(self): self.__beginCount = self.counter() # 时间差,精确到微秒 def secondsDiff(self): self.__endCount = self.counter() return (self.__endCount - self.__beginCount) / (self.__freq + 0.) # 休眠,精确到毫秒 def sleep(self, timeout): while True: self.__endCount = self.counter() if ((self.__endCount - self.__beginCount) / (self.__freq + 0.)) * 1000 >= timeout: return
标签:
python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧