Запуск потока Django в качестве фоновой задачи

У меня есть приложение Django, которому необходимо каждые 5 секунд выполнять вызов API к внешней конечной точке для проверки. Поскольку я не хочу использовать внешние инструменты, такие как django-background-task, Redis, Celery, RQ или что-то еще, я создал свое собственное решение, где я выделил поток для задачи. Вот декоратор, который я нашел здесь :

def start_new_thread(function):
    def decorator(*args, **kwargs):
        t = Thread(target = function, args=args, kwargs=kwargs)
        t.daemon = True
        t.start()
    return decorator

А вот как я вызываю функцию:

JOB_IN_THE_QUEUE = False

@start_new_thread
def check_if_job_in_the_queue_and_enqueue():
    """Checks if the job is already in the queue and enqueues it if needed."""
    global JOB_IN_THE_QUEUE
    if JOB_IN_THE_QUEUE:
        return
    JOB_IN_THE_QUEUE = True
    success = print_something()
    # print_something() is just a dummy function

А вот как я печатаю бесконечно (это позже станет вызовом API для стороннего API):

def print_something():
a = print_it()
if not a:
    time.sleep(20)
    print_something()
    # print_something() is another dummy function with while True loop replacing the actual API calling

Сейчас я вызываю check_if_job_in_the_queue_and_enqueue() в конечной точке. Я жду get запрос, который я отправляю, как только Django работает, чтобы запустить работу в новом потоке, и это работает хорошо.

Мой вопрос: есть ли способ вызвать это без необходимости обращаться к конечной точке с помощью GET (или любого другого вызова, на самом деле)?

Вернуться на верх