Вызов задач 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')