Django
Uruchamianie selera z przełożonym
Szukaj…
Konfiguracja selera
SELER
Instalacja -
pip install django-celery
Dodaj
Podstawowa struktura projektu.
- 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
Dodaj plik
celery.py
do swojegostack/stack/
folderu.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)
do swojego
stack/stack/__init__.py
dodaj następujący kod:from __future__ import absolute_import from .celery import app as celery_app # noqa
Utwórz zadanie i oznacz je na przykład jako
@shared_task()
@shared_task() def add(x, y): print("x*y={}".format(x*y))
Uruchamianie pracownika selera „ręcznie”:
celery -A stack worker -l info
jeśli chcesz również dodać
Running Supervisor
Utwórz skrypt, aby uruchomić selera. Wstaw skrypt do aplikacji. Na przykład:
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'
Dodaj prawa wykonywania do nowo utworzonego skryptu:
chmod u+x bin/celery_worker_start
Zainstaluj superwizora (pomiń ten test, jeśli superwizor jest już zainstalowany)
apt-get install supervisor
Dodaj plik konfiguracyjny dla swojego przełożonego, aby zacząć seler. Umieść go w
/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
Ponownie przeczytaj i zaktualizuj przełożonego
sudo supervisorctl reread stack-celery-worker: available sudo supervisorctl update stack-celery-worker: added process group
Podstawowe polecenia
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
Seler + RabbitMQ z Przełożonym
Seler wymaga pośrednika do obsługi przekazywania wiadomości. Używamy RabbitMQ, ponieważ jest łatwy w konfiguracji i jest dobrze obsługiwany.
Zainstaluj rabbitmq za pomocą następującego polecenia
sudo apt-get install rabbitmq-server
Po zakończeniu instalacji utwórz użytkownika, dodaj hosta wirtualnego i ustaw uprawnienia.
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 ".*" ".*" ".*"
Aby uruchomić serwer:
sudo rabbitmq-server
Możemy zainstalować seler z pipem:
pip install celery
W pliku Django settings.py adres URL brokera wyglądałby wtedy podobnie
BROKER_URL = 'amqp://myuser:mypassword@localhost:5672/myvhost'
Teraz zacznij selera
celery -A your_app worker -l info
To polecenie uruchamia proces roboczy Selera w celu uruchomienia dowolnych zadań zdefiniowanych w aplikacji django.
Supervisor to program w języku Python, który pozwala kontrolować i uruchamiać dowolne procesy uniksowe. Może także zrestartować zawieszone procesy. Używamy go, aby upewnić się, że pracownicy Seler zawsze działają.
Najpierw zainstaluj przełożonego
sudo apt-get install supervisor
Utwórz plik your_proj.conf w confvisor przełożonego.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
Po utworzeniu i zapisaniu pliku konfiguracyjnego możemy poinformować Supervisora o naszym nowym programie za pomocą polecenia supervisorctl. Najpierw mówimy Supervisorowi, aby szukał nowych lub zmienionych konfiguracji programów w katalogu /etc/supervisor/conf.d z:
sudo supervisorctl reread
Następnie nakazuje wprowadzenie zmian w:
sudo supervisorctl update
Po uruchomieniu naszych programów niewątpliwie nadejdzie czas, kiedy będziemy chcieli zatrzymać, uruchomić ponownie lub zobaczyć ich status.
sudo supervisorctl status
Aby zrestartować instancję selera:
sudo supervisorctl restart your_proj_celery