剩下的时间睡觉

时间:2019-05-05 17:16:24

标签: python time

我正试图每分钟运行一个方法。

该方法在互联网上进行了一些操作,因此可能需要1秒钟到30秒的时间。

我想做的是计算此方法花费的时间,然后在剩余时间中休眠,以确保该方法本身每分钟运行一次。

当前我的代码如下:

def do_operation():
    access_db()
    sleep(60)

如您所见,这并没有考虑到任何延迟,尽管它可以工作,但有时会失败并完全跳过一分钟,这是永远不会发生的。

2 个答案:

答案 0 :(得分:1)

import time

def do_operation():
    start = time.time()
    access_db()
    time.sleep(60-time.time()+start)

答案 1 :(得分:0)

此代码将允许您在定义的时间间隔内运行可调用对象:

import time
import random

def recurring(interval, callable):
    i = 0
    start = time.time()
    while True:
        i += 1
        callable()
        remaining_delay = max(start + (i * interval) - time.time(), 0)
        time.sleep(remaining_delay)

def tick_delay():
    print('tick start')
    time.sleep(random.randrange(1, 4))
    print('tick end')

recurring(5, tick_delay)

注释

  • 函数tick_delay会休眠几秒钟,以模拟可能花费不确定时间的函数。
  • 如果可调用对象花费的时间超过定义的循环间隔,则下一次迭代将在最后一次结束之后立即进行调度。要使可调用的并行运行,您需要使用threadingasyncio