[英]Wait if code execution finished before a time limit and abort if didn't finish within limit
我有 for 循环,我需要每次迭代只需要 5 毫秒。 即,如果代码在 5 毫秒之前完成,则迭代应该等到 5 毫秒过去,如果超过 5 毫秒,循环应该忽略它并进入下一次迭代。
我试过这段代码,但它不准确,如果需要更多时间,它无助于中止下一次迭代
import time
for i in range(N):
now = time.time_ns()
do_something(i)
time.sleep(0.005 - (time.time_ns() - now -3)*1e-9)
我使用 time_ns() 因为我认为它比 time() 更准确,但它没有多大帮助
并在您的计算中使用。 这是我的例子
import random
import time
N = 10
D = 0.5
T0 = time.time()
def do_something(msg):
"""Sleep 0 to 1 seconds"""
time.sleep(random.random())
print(msg)
for i in range(N):
# check if we're overtime
if T0 + (i+1)*D < time.time():
continue
do_something(i)
# use modulo to compute sleep duration
time.sleep(
D - (time.time() - T0) % D
)
和输出。 注意一些数字丢失了,需要 10×0.5 = 5 秒。
$ time python3 aly.py
0
1
3
5
6
8
real 0m5.030s
user 0m0.028s
sys 0m0.004s
关于time_ns: time.sleep
需求浮动,因此使用整数纳秒是没有意义的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.