Django
Kör selleri med handledare
Sök…
Sellerikonfiguration
SELLERI
Installation -
pip install django-celery
Lägg till
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
Lägg till
celery.py
fil i dinstack/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)
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
Skapa en uppgift och markera den till exempel som
@shared_task()
@shared_task() def add(x, y): print("x*y={}".format(x*y))
Kör selleriarbetare "för hand":
celery -A stack worker -l info
om du också vill lägga till
Körande handledare
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'
Lägg till exekveringsrättigheter till ditt nyskapade skript:
chmod u+x bin/celery_worker_start
Installera handledare (hoppa över det här testet om handledaren redan är installerad)
apt-get install supervisor
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
Läs och uppdatera handledaren
sudo supervisorctl reread stack-celery-worker: available sudo supervisorctl update stack-celery-worker: added process group
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