我有一个 Python 模块,其中包含一个 while 循环,该循环应该运行固定的时间。我通过向 time.time() 的输出添加一个常量并运行直到 time.time() 大于该变量来完成此操作。这没有出现任何问题,但同样的事情在 Cython 中对我不起作用。现在我的时间安排严重偏离了。
仅举一个最小的例子来证明这一点:
import time
cdef float wait_time = 3
def slow():
cdef float end_time = time.time() + wait_time
while time.time() < end_time:
pass
print("Done")
%timeit -r1 -n1 slow()
Done
44.2 µs ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)
%timeit -r1 -n1 slow()
Done
35.5 µs ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)
%timeit -r1 -n1 slow()
Done
35.5 µs ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)
%timeit -r1 -n1 slow()
Done
19.5 µs ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)
%timeit -r1 -n1 slow()
Done
35.5 µs ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)
%timeit -r1 -n1 slow()
Done
20.6 µs ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)
%timeit -r1 -n1 slow()
Done
20 µs ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)
%timeit -r1 -n1 slow()
Done
56 µs ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)
%timeit -r1 -n1 slow()
Done
1min 3s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)
%timeit -r1 -n1 slow()
Done
32.9 µs ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)
%timeit -r1 -n1 slow()
Done
1min 5s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)
这种情况往往遵循的一般行为是,基本上不会有等待,除非在运行函数之前暂停一段时间,在这种情况下,会出现过度等待。
蟒蛇的float
is C’s double
. C’s float
通常有只有 24 个有效位(其中一位是隐式的),使其精度为 128 秒(自 2004 年起)。当您的加法从向下舍入变为向上舍入时,它会从过去一分钟变为未来一分钟的值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)