'Python does something every 5 minutes

i need to check data on an API. The API is refreshed with new data every 5 minutes (10:00, 10:05, 10:10 etc...)

I don't want to use time.sleep(300) because i want my script to do something at 10:05:03, then 10:05:03 etc. and not 5 min avec the script started (maybe it started at 10h12 How can i build this?

Thanks y'all.



Solution 1:[1]

Check the time regularly in a loop and do something at certain minute marks:

import time

# returns the next 5 minute mark
# e.g. at minute 2 return 5
def get_next_time():
    minute = time.localtime().tm_min
    result = 5 - (minute % 5) + minute
    if result == 60:
        result = 0
    return result

next_run = get_next_time()

while True:
    now = time.localtime()
    # at minute 0, 5, 10... + 3 seconds:
    if next_run == now.tm_min and now.tm_sec >= 3:
        print("checking api")
        next_run = get_next_time()
    time.sleep(1)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Wups