繁体   English   中英

如果代码执行在时间限制之前完成则等待,如果没有在限制内完成则中止

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM