Почему при использовании Celery Beat несколько задач отправляются, но выполняется только одна?

Помогите разобраться с проблемой в Celery. Я задал несколько задач в Celery Beat, но выполняется только одна задача (notify_after_sobes). В логах Celery Beat я вижу, что все задачи распознаны, но вторая задача (notify_send_sobes_link) завершается с ошибкой: NotRegistered('celery_settings.tasks.notify_send_sobes_link').

Вот пример моей конфигурации:

```
app = Celery('tasks')
app.config_from_object(celeryconfig)

app.conf.beat_schedule = {
    'notify_tomorrow_sobes_task': {
        'task': 'celery_settings.tasks.notify_tomorrow_sobes',
        'schedule': crontab(minute="00", hour="18"),
    },
    'send_sobes_link': {
        'task': 'celery_settings.tasks.notify_send_sobes_link',
        'schedule': crontab(minute="5"),
    },
    'after_sobes': {
        'task': 'celery_settings.tasks.notify_after_sobes',
        'schedule': crontab(minute="5"),
    },
}
app.autodiscover_tasks()

@app.task
def notify_tomorrow_sobes():
    asyncio.run(send_notify_tomorrow_sobes())

@app.task
def notify_send_sobes_link():
    asyncio.run(send_sobes_link())

@app.task
def notify_after_sobes():
    asyncio.run(after_sobes())
```

Как можно исправить эту проблему? В чем может быть причина ошибки NotRegistered('celery_settings.tasks.notify_send_sobes_link')?
Изображение к вопросу
  • 7 декабря 2023 г. 14:19
Ответы на вопрос 1
Ошибка 'NotRegistered' означает, что Celery не может найти зарегистрированную задачу с указанным именем. В вашем случае ошибка возникает для задачи 'notify_send_sobes_link'.

Возможные причины ошибки:

1. Отсутствие регистрации задачи: Убедитесь, что задача 'notify_send_sobes_link' зарегистрирована в Celery приложении. В вашем примере кода вы зарегистрировали задачи с использованием декоратора `@app.task`, и предполагается, что это должно быть достаточно для регистрации задачи. Однако, если ваше приложение находится в модуле 'celery_settings', убедитесь, что данный модуль импортирован до задания расписания cron.

2. Неправильное имя задачи: Проверьте правильность имени задачи 'notify_send_sobes_link'. Удостоверьтесь, что имя соответствует точному имени функции задачи и что оно не содержит опечаток или пробелов.

3. Необходимость перезапуска Celery Worker: Если вы только что добавили новую задачу или изменили имя задачи, возможно, вам нужно перезапустить Celery Worker, чтобы он обнаружил и зарегистрировал новую задачу.

Если вы проверили все вышеуказанные пункты и ошибка продолжает возникать, может быть полезно включить отладочный режим в Celery, чтобы получить более подробную информацию об ошибке.
Похожие вопросы