Запретите 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()
Если есть более чистое решение, я с удовольствием приму его.