Sök…


Sellerikonfiguration

SELLERI

  1. Installation - pip install django-celery

  2. Lägg till

  3. Grundläggande projektstruktur.

     - 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. Lägg till celery.py fil i din stack/stack/ folder.

     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. till din stack/stack/__init__.py lägg till följande kod:

     from __future__ import absolute_import
     from .celery import app as celery_app  # noqa
    
  6. Skapa en uppgift och markera den till exempel som @shared_task()

     @shared_task()
     def add(x, y):
         print("x*y={}".format(x*y))
    
  7. Kör selleriarbetare "för hand":

    celery -A stack worker -l info om du också vill lägga till

Körande handledare

  1. Skapa ett skript för att starta selleriarbetare. Sätt in ditt skript i din app. Till exempel: 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. Lägg till exekveringsrättigheter till ditt nyskapade skript:

    chmod u+x bin/celery_worker_start

  3. Installera handledare (hoppa över det här testet om handledaren redan är installerad)

    apt-get install supervisor

  4. Lägg till konfigurationsfil för din handledare för att starta din selleri. Placera den i /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. Läs och uppdatera handledaren

     sudo supervisorctl reread
         stack-celery-worker: available
     sudo supervisorctl update
         stack-celery-worker: added process group
    
  6. Grundläggande kommandon

     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
    

Selleri + RabbitMQ med handledare

Selleri kräver att en mäklare hanterar vidarebefordran av meddelanden. Vi använder RabbitMQ eftersom det är enkelt att installera och det stöds väl.

Installera rabbitmq med följande kommando

sudo apt-get install rabbitmq-server

När installationen är klar ska du skapa användare, lägga till en virtuell värd och ange behörigheter.

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 ".*" ".*" ".*"

Så här startar du servern:

sudo rabbitmq-server

Vi kan installera selleri med pip:

pip install celery

I din Django settings.py-fil ser din mäklare-URL då ut

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

Starta nu selleriarbetaren

celery -A your_app worker -l info

Det här kommandot startar en Celery-arbetare för att köra alla uppgifter som definieras i din django-app.

Supervisor är ett Python-program som låter dig kontrollera och fortsätta köra alla Unix-processer. Det kan också starta om kraschade processer. Vi använder den för att se till att selleriarbetare alltid kör.

Först installera handledaren

sudo apt-get install supervisor

Skapa din_proj.conf-fil i din handledare 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

När vår konfigurationsfil har skapats och sparats, kan vi informera handledaren om vårt nya program via kommandot supervorctl. Först ber vi Supervisor att leta efter nya eller ändrade programkonfigurationer i katalogen /etc/supervisor/conf.d med:

sudo supervisorctl reread

Följt av att berätta för att genomföra alla ändringar med:

sudo supervisorctl update

När våra program körs kommer det utan tvekan en tid då vi vill stoppa, starta om eller se deras status.

sudo supervisorctl status

För att starta om din selleriinstans:

sudo supervisorctl restart your_proj_celery


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow