Запретите celery запускать потоки моего приложения Django

У меня есть приложение Django, и я использую celery (с redis) для выполнения задач обработки в фоновом режиме. Кроме того, у меня есть поток python, который выполняет некоторые периодические проверки как часть моего приложения Django. Удивительно, но когда я запускаю celery, я вижу, что мой поток также запущен как часть celery. Я хотел бы предотвратить такое поведение и иметь только один экземпляр моего потока, и чтобы он был частью моего приложения Django. Как я могу предотвратить его запуск в celery?

Я протестировал его на только что созданном приложении и вижу точно такое же поведение:

settings.py:

...
CELERY_BROKER_URL = 'redis://localhost:6379/1'

__init__.py:

from threading import Thread
from time import sleep
from .celery import app as celery_app

__all__ = ('celery_app',)

def mythread():
    while True:
      print("thread is running")
      sleep(10)

new_thread = Thread(target=mythread, daemon=True)
new_thread.start()

celery.py:

import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myapp.settings')

app = Celery('myapp')

app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()

Выход сельдерея:

...
[2022-06-15 16:21:49,923: INFO/MainProcess] Events of group {task} enabled by remote.
[2022-06-15 16:21:49,958: WARNING/MainProcess] thread is running
[2022-06-15 16:21:59,968: WARNING/MainProcess] thread is running

Я реализовал это обходное решение, чтобы предотвратить запуск потока под celery:

app_name = sys.argv[0]
if (app_name.find("celery") == -1):
  new_thread = Thread(target=mythread, daemon=True)
  new_thread.start()

Если есть более чистое решение, я с удовольствием приму его.

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