В этой заметке я расскажу о том, как заставить работать Celery и последнюю, на текущий момент, версию фреймворка Django 1.9.
В качестве брокера мы будем использовать RabbitMQ. Для начала нужно его установить.
1 | sudo apt-get install rabbitmq-server |
При работе на локальной машине может потребоваться слегка подправить конфигурацию, которая обычно хранится здесь:
1 | sudo nano /etc/rabbitmq/rabbitmq-env.conf |
1 2 3 4 5 6 | NODENAME=rabbit NODE_IP_ADDRESS=127.0.0.1 NODE_PORT=5672 HOME=/var/lib/rabbitmq LOG_BASE=/var/log/rabbitmq MNESIA_BASE=/var/lib/rabbitmq/mnesia |
Я изменил nodename на более приятное и поменял IP адрес с 0.0.0.0 на 127.0.0.1.
Теперь нужно запустить/перезапустить rabbit.
1 | sudo service rabbitmq-server start |
Далее, добавим пользователя, через которого будет проходить общение между django и rabbit и установим ему права.
1 2 | sudo rabbitmqctl add_user my_user my_password sudo rabbitmqctl set_permissions -p / my_user ".*" ".*" ".*" |
Перейдем в django-проект. Установим модуль:
1 | pip install django-celery |
Теперь добавим в настройках проекта приложение ‘djcelery’ в список INSTALLED_APPS и следующие настройки ниже:
1 2 3 4 5 6 7 | import djcelery djcelery.setup_loader() BROKER_URL = 'amqp://my_user:my_password@127.0.0.1:5672//' CELERY_ACCEPT_CONTENT = ['json'] CELERY_TASK_SERIALIZER = 'json' CELERY_RESULT_SERIALIZER = 'json' CELERY_IMPORTS = ('parsers.tasks',) |
В последней настройке (CELERY_IMPORTS) указываются приложения и файлы, в которых celery будет искать ваши задачи. Не забывайте указывать у задач декоратор @task().
Теперь нужно провести миграцию.
1 | python manage.py migrate |
Запускаем
1 | python manage.py celery worker –loglevel=INFO |
Рекомендую установить flower для визуального мониторинга задач.
1 | pip install flower |
Запускается он в отдельном терминале:
1 | celery flower --broker=amqp://my_user:my_password@127.0.0.1:5672// -persistent=true |
После этого заходим на http://127.0.0.1:5555 и мониторим.