Home > Mobile >  Python does something every 5 minutes
Python does something every 5 minutes

Time:01-05

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.

CodePudding user response:

You can use the following code:

import threading

def check_api():
    pass

timer_thread = threading.Timer(300, check_api)
timer_thread.start()
# call timer_thread.cancel() when you need it to stop

This will call your check_api function every 5 minutes and will not block your main code's execution.

as mentioned by @scotyy3785 the above code will only run once but I realize what you want and have written the code for it:

from threading import Thread
from time import sleep
import datetime


def check_api():
    # ... your code here ...
    pass


def caller(callback_func, first=True):
    if first:
        while not datetime.datetime.now().minute % 5 == 0:
            sleep(1)
    callback_func()
    sleep(300)
    caller(callback_func, False)


thread = Thread(target=caller, args=(check_api,))
thread.start()

# you'll have to handle the still running thread on exit

The above code will call check_api at minutes like 00, 05, 10, 15...

CodePudding user response:

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)
  •  Tags:  
  • Related