Я пытаюсь написать команду управления, которая запускает одну или несколько задач Сельдерея.Сельдерей: Запустить задачу из команды управления Django
Для этого я определил вспомогательную функцию:
from celery import chord
from front import models
from worker.tasks import process_account, notify # The celery tasks
def register_check(account_ids, user):
if not account_ids:
return
tasks = [process_account.si(user.pk, acc) for acc in account_ids]
maintask = chord(tasks)(notify.s())
maintask.track_started = True
kwargs = {
'task_id': maintask.id,
'user': user,
'accounts': map(int, account_ids),
}
user_job = models.UserJob.objects.create(**kwargs)
return user_job
Все работает хорошо при запуске задачи этот путь с точки зрения, но при вызове той же функции из команды пользовательского управления, он не работает:
import sys
from django.core.management.base import BaseCommand
from front.utils import register_check
from front.models import User
class Command(BaseCommand):
help = 'Run recurring checks. Use --daily, --weekly and/or --monthly options.'
def handle(self, *args, **options):
users = User.objects.filter(condition='value')
for user in users:
# fetch account_ids
user_job = register_check(account_ids=account_ids, user=user)
sys.stdout.write('Done, processed {} users.\n'.format(users.count()))
Вместо этого я получаю следующее отслеживающий:
# (...)
File "/home/danilo/.virtualenvs/radar/lib/python2.7/site-packages/amqp/connection.py", line 136, in __init__
self.transport = create_transport(host, connect_timeout, ssl)
File "/home/danilo/.virtualenvs/radar/lib/python2.7/site-packages/amqp/transport.py", line 264, in create_transport
return TCPTransport(host, connect_timeout)
File "/home/danilo/.virtualenvs/radar/lib/python2.7/site-packages/amqp/transport.py", line 99, in __init__
raise socket.error(last_err)
error: [Errno 111] Connection refused
Должен ли я каким-то образом инициализировать сельдерей в команде управления? Или есть какой-то параметр, который мне нужно включить, чтобы заставить задачи Сельдерея работать из пользовательской команды управления?
(я не думаю, что это уместно, но мы используем Redis и Postgres в качестве брокера/бэкэндом.)