Вызов задач celery с другого сервера

У меня есть приложение django + redis на одном сервере и celery на другом. Я хочу вызывать задачу celery из django app.

Мой task.py на Celery Server:

from celery import Celery

app = Celery('tasks')
app.conf.broker_url = 'redis://localhost:6379/0'

@app.task(bind=True)
def test():
    print('Testing')

Вызов задачи celery из Django Server:

from celery import Celery
celery = Celery()
celery.conf.broker_url = 'redis://localhost:6379/0'
celery.send_task('tasks.test')

Я запускаю celery worker с помощью следующей команды:

celery -A tasks worker --loglevel=INFO

Когда я вызываю задачу celery из django, она пингует сервер celery, но я получаю следующую ошибку:

Получено незарегистрированное задание типа 'tasks.test'. Сообщение было проигнорировано и отброшено. Не забыли ли вы импортировать модуль, содержащий эту задачу? Или может быть вы используете относительный импорт?

.

Как это исправить или есть ли способ вызвать задачу?

Ваша задача должна быть общей задачей внутри celery следующим образом:

tasks.py

from celery import Celery, shared_task

app = Celery('tasks')
app.conf.broker_url = 'redis://localhost:6379/0'

@shared_task(name="test")
def test(self):
    print('Testing')

и запустить сельдерей в обычном режиме:

celery -A tasks worker --loglevel=INFO

Ваше приложение может затем вызвать вашу задачу test:

main.py

from celery import Celery
celery = Celery()
celery.conf.broker_url = 'redis://localhost:6379/0'
celery.send_task('tasks.test')
Вернуться на верх