Запуск потока 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 (или любого другого вызова, на самом деле)?