Общие задачи Celery зависают до тех пор, пока не будет запущена обычная задача

Я работаю с Celery и Django. У меня есть две задачи:

@app.task(bind=True)
def debug_normal_task(self):
    print('Hello World')

@shared_task(bind=True)
def debug_shared_task(self):
    print('Hello World')

Whenever I try to run debug_shared_task, Celery hangs indefinitely, every time. It does this until I run debug_normal_task once.
As soon as I run debug_normal_task, debug_shared_task starts working perfectly, every time.

То же самое происходит с каждой из моих общих задач по всему проекту.
Ни одна из них не работает -> я запускаю одну обычную задачу в любом месте -> все они работают.

Я могу переключить их все на обычные задачи или просто запустить обычную задачу при запуске проекта, но я хотел бы понять, почему она ведет себя так с самого начала.


Здесь перечислены файлы:

views.py

from ceom.celery import debug_normal_task, debug_shared_task

def news(request):
    debug_shared_task.delay() #Doesn't work
    debug_normal_task.delay()
    debug_shared_task.delay() #Works
    ...

celery.py

from __future__ import absolute_import
import os

from celery import Celery, shared_task
from celery.schedules import crontab
from ceom.celeryq.tasks_periodic import update_datasets

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ceom.settings")

app = Celery("ceom")
app.config_from_object("django.conf:settings", namespace="CELERY")
app.autodiscover_tasks()

@app.task(bind=True)
def debug_normal_task(self):
    print('Hello World')

@shared_task(bind=True)
def debug_shared_task(self):
    print('Hello World')

__init__.py

from __future__ import absolute_import
from ceom.celery import app as celery_app

__all__ = ('celery_app',)

I'll admit I don't really know exactly what __init__.py does here. I got it from here. It's my understanding that I have to import something from celery.py, otherwise it won't be run and the tasks won't be registered. I think something similar might be happening for my shared task issue, but I'm not sure.

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