Szukaj…


Konfiguracja selera

SELER

  1. Instalacja - pip install django-celery

  2. Dodaj

  3. 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
    
  4. Dodaj plik celery.py do swojego stack/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)
    
  5. do swojego stack/stack/__init__.py dodaj następujący kod:

     from __future__ import absolute_import
     from .celery import app as celery_app  # noqa
    
  6. Utwórz zadanie i oznacz je na przykład jako @shared_task()

     @shared_task()
     def add(x, y):
         print("x*y={}".format(x*y))
    
  7. Uruchamianie pracownika selera „ręcznie”:

    celery -A stack worker -l info jeśli chcesz również dodać

Running Supervisor

  1. 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'
    
  2. Dodaj prawa wykonywania do nowo utworzonego skryptu:

    chmod u+x bin/celery_worker_start

  3. Zainstaluj superwizora (pomiń ten test, jeśli superwizor jest już zainstalowany)

    apt-get install supervisor

  4. 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
    
  5. Ponownie przeczytaj i zaktualizuj przełożonego

     sudo supervisorctl reread
         stack-celery-worker: available
     sudo supervisorctl update
         stack-celery-worker: added process group
    
  6. 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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow