- 主题:time.sleep精度有问题 还是我测试方法有问题?
我需要核实一下 time.sleep的准确效果 用如下代码 。核实的结果,震惊!
想请教一下,是我的方法不对,还是 time.sleep 本来就是这么不堪?有没有三方库能精确一点的?谢谢
from time import perf_counter as pc
def slee_in_thread():
"""
测试一个极为短暂的sleep也实际上会导致15ms左右的暂停
以下为笔记本测试结果打印 win11 python.3.10
thread t:0.001 n:1000 time:15.547761800000444 avg:0.015547761800000445
以下为java平台运行类似代码的结果
java use time, t:1ms n:1000 total:1.516 avg:0.001516
"""
t = 1/1000
n = 1000
start = pc()
for i in range(n):
time.sleep(t)
span = pc() - start
print(f"thread t:{t} n:{n} time:{span} avg:{span/n}")
--
修改:misslost FROM 120.245.130.*
FROM 120.245.130.*
sleep不是用来实现定时效果的
【 在 misslost 的大作中提到: 】
: 我需要核实一下 time.sleep的准确效果 用如下代码 。核实的结果,震惊!
: 想请教一下,是我的方法不对,还是 time.sleep 本来就是这么不堪?有没有三方库能精确一点的?谢谢
: def slee_in_thread():
: ...................
--
FROM 222.70.23.*
java或者其他很多平台能够用sleep实现大致的效果(误差没有这么夸张)。python中,类似的功能需求,应该用什么?
【 在 oldwatch 的大作中提到: 】
: sleep不是用来实现定时效果的
:
--
FROM 120.245.130.*
可能和操作系统有关
Debian Linux 5.10.162-1下
thread t:0.001 n:1000 time:1.1085763700102689 avg:0.001108576370010269
【 在 misslost 的大作中提到: 】
: 我需要核实一下 time.sleep的准确效果 用如下代码 。核实的结果,震惊!
: 想请教一下,是我的方法不对,还是 time.sleep 本来就是这么不堪?有没有三方库能精确一点的?谢谢
: from time import perf_counter as pc
: ...................
--
FROM 61.149.143.*
我自己更新一下
后来发现 python3.11对time.sleep做了大量改进。上面代码用3.11运行了一下 基本正常了。
python里面的坑真是有点多。
【 在 vwx 的大作中提到: 】
: 可能和操作系统有关
: Debian Linux 5.10.162-1下
: thread t:0.001 n:1000 time:1.1085763700102689 avg:0.001108576370010269
: ...................
--
FROM 120.245.130.*
分时操作系统上要实现高精度计时本身就比较有难度,和语言应该关系没那么大
--
FROM 114.242.179.*
不过还要补充提醒一下,即便在python3.11中 asyncio.sleep 还是非常不堪的
async def sleep_in_async(pc=time.perf_counter):
# 测试一个极为短暂的sleep也实际上会导致15ms左右的暂停
'''
笔记本测试结果
run in asyncio. t:0.001 n:1000 time:15.520545200000925 avg:0.015520545200000924
'''
n = 1000
t = 1/1000
start = pc()
for i in range(n):
await asyncio.sleep(t)
span = pc() - start
print(f"run in asyncio. t:{t} n:{n} time:{span} avg:{span/n}")
【 在 misslost 的大作中提到: 】
: 我需要核实一下 time.sleep的准确效果 用如下代码 。核实的结果,震惊!
: 想请教一下,是我的方法不对,还是 time.sleep 本来就是这么不堪?有没有三方库能精确一点的?谢谢
: from time import perf_counter as pc
: ...................
--
FROM 120.245.130.*
这么精确的暂停,是要做sleep排序法吗?
【 在 misslost 的大作中提到: 】
: 不过还要补充提醒一下,即便在python3.11中 asyncio.sleep 还是非常不堪的
: async def sleep_in_async(pc=time.perf_counter):
: # 测试一个极为短暂的sleep也实际上会导致15ms左右的暂停
: ...................
--
FROM 121.33.160.*
各位,仔细看一下我说的是什么主题好么
跟其他的开发语言的表现效果比较一下,就真的有那么不可接受吗
必须竖个自己喜欢的靶子来打么
【 在 ToSimplicity 的大作中提到: 】
: 这谈不上坑吧...
: 这是: 不看文档
: 难道它应该命名为time.sleep_n_plus_arbitrary_amount_because_of_the_scheduling_of_other_activity_in_the_system(secs)?
: ...................
--
FROM 120.245.130.*
确实跟操作系统是相关的。linux下的这块表现比较好 win下一直有问题
【 在 vwx 的大作中提到: 】
: 可能和操作系统有关
: Debian Linux 5.10.162-1下
: thread t:0.001 n:1000 time:1.1085763700102689 avg:0.001108576370010269
: ...................
--
FROM 120.245.130.*