Поиск…


Конфигурация сельдерея

СЕЛЬДЕРЕЙ

  1. Установка - pip install django-celery

  2. добавлять

  3. Основная структура проекта.

     - src/
       - bin/celery_worker_start # will be explained later on
       - logs/celery_worker.log
       - stack/__init __.py
       - stack/celery.py
       - stack/settings.py
       - stack/urls.py
       - manage.py
    
  4. Добавьте файл celery.py в stack/stack/ папку stack/stack/ папку.

     from __future__ import absolute_import
     import os
     from celery import Celery
     os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'stack.settings')
     from django.conf import settings  # noqa
     app = Celery('stack')
     app.config_from_object('django.conf:settings')
     app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
    
  5. в ваш stack/stack/__init__.py добавьте следующий код:

     from __future__ import absolute_import
     from .celery import app as celery_app  # noqa
    
  6. Создайте задачу и отметьте ее, например, как @shared_task()

     @shared_task()
     def add(x, y):
         print("x*y={}".format(x*y))
    
  7. Запуск работника сельдерея «вручную»:

    celery -A stack worker -l info если вы также хотите добавить

Управляющий супервайзер

  1. Создайте скрипт, чтобы начать работу с сельдереем. Вставьте скрипт в свое приложение. Например: stack/bin/celery_worker_start

     #!/bin/bash
     
     NAME="StackOverflow Project - celery_worker_start"
     
     PROJECT_DIR=/home/stackoverflow/apps/proj/proj/
     ENV_DIR=/home/stackoverflow/apps/proj/env/
     
     echo "Starting $NAME as `whoami`"
     
     # Activate the virtual environment
     cd "${PROJECT_DIR}"
     
     if [ -d "${ENV_DIR}" ]
     then
         . "${ENV_DIR}bin/activate"
     fi
     
     celery -A stack --loglevel='INFO'
    
  2. Добавить права выполнения для вновь созданного скрипта:

    chmod u+x bin/celery_worker_start

  3. Установите диспетчер (пропустите этот тест, если супервизор уже установлен)

    apt-get install supervisor

  4. Добавьте файл конфигурации для своего супервизора, чтобы начать сельдерей. Поместите его в /etc/supervisor/conf.d/stack_supervisor.conf

     [program:stack-celery-worker]
     command = /home/stackoverflow/apps/stack/src/bin/celery_worker_start
     user = polsha
     stdout_logfile = /home/stackoverflow/apps/stack/src/logs/celery_worker.log
     redirect_stderr = true
     environment = LANG = en_US.UTF-8,LC_ALL = en_US.UTF-8
     numprocs = 1
     autostart = true
     autorestart = true
     startsecs = 10
     stopwaitsecs = 600
     priority = 998
    
  5. Перечитать и обновить супервизор

     sudo supervisorctl reread
         stack-celery-worker: available
     sudo supervisorctl update
         stack-celery-worker: added process group
    
  6. Основные команды

     sudo supervisorctl status stack-celery-worker                       
         stack-celery-worker      RUNNING    pid 18020, uptime 0:00:50
     sudo supervisorctl stop stack-celery-worker  
         stack-celery-worker: stopped
     sudo supervisorctl start stack-celery-worker                        
         stack-celery-worker: started
     sudo supervisorctl restart stack-celery-worker 
         stack-celery-worker: stopped
         stack-celery-worker: started
    

Celery + RabbitMQ с супервизором

Сельдерей требует брокера для обработки сообщений. Мы используем RabbitMQ, потому что его легко настроить, и он хорошо поддерживается.

Установите rabbitmq, используя следующую команду:

sudo apt-get install rabbitmq-server

По завершении установки создайте пользователя, добавьте виртуальный хост и установите разрешения.

sudo rabbitmqctl add_user myuser mypassword
sudo rabbitmqctl add_vhost myvhost
sudo rabbitmqctl set_user_tags myuser mytag
sudo rabbitmqctl set_permissions -p myvhost myuser ".*" ".*" ".*"

Чтобы запустить сервер:

sudo rabbitmq-server

Мы можем установить сельдерей с пипеткой:

pip install celery

В файле настроек Django settings.py ваш URL-адрес брокера будет выглядеть примерно так:

BROKER_URL = 'amqp://myuser:mypassword@localhost:5672/myvhost'

Теперь начните работу сельдерея

celery -A your_app worker -l info

Эта команда запускает работника Celery для выполнения любых задач, определенных в вашем приложении django.

Supervisor - это программа Python, которая позволяет вам контролировать и поддерживать любые процессы unix. Он также может перезапускать разбитые процессы. Мы используем его, чтобы убедиться, что работники сельдерея всегда работают.

Во-первых, Install supervisor

sudo apt-get install supervisor

Создайте файл your_proj.conf в вашем супервизоре conf.d (/etc/supervisor/conf.d/your_proj.conf):

[program:your_proj_celery]
command=/home/your_user/your_proj/.venv/bin/celery --app=your_proj.celery:app worker -l info
directory=/home/your_user/your_proj
numprocs=1
stdout_logfile=/home/your_user/your_proj/logs/celery-worker.log
stderr_logfile=/home/your_user/your_proj/logs/low-worker.log
autostart=true
autorestart=true
startsecs=10

После создания и сохранения нашего конфигурационного файла мы можем сообщить Супервизору нашей новой программы с помощью команды supervisorctl. Сначала мы советуем Supervisor искать любые новые или измененные конфигурации программ в каталоге /etc/supervisor/conf.d с:

sudo supervisorctl reread

Затем следуйте указаниям, чтобы внести изменения в:

sudo supervisorctl update

Когда наши программы будут запущены, несомненно, будет время, когда мы хотим остановить, перезапустить или увидеть их статус.

sudo supervisorctl status

Для перезапуска вашего экземпляра сельдерея:

sudo supervisorctl restart your_proj_celery


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow