수색…


셀러리 구성

셀러리

  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/ 폴더에 추가하십시오.

     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 추가하려는 경우 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
    

셀러 리 + RabbitMQ 관리자

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와 함께 셀러리를 설치할 수 있습니다 :

pip install celery

Django settings.py 파일에서 브로커 URL은 다음과 같이 보입니다.

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

셀러리 작업자를 시작하십시오.

celery -A your_app worker -l info

이 명령은 Celery 작업자가 django app에 정의 된 작업을 실행하기 시작합니다.

수퍼바이저는 유닉스 프로세스를 제어하고 실행하는 데 사용할 수있는 Python 프로그램입니다. 또한 충돌 한 프로세스를 재시작 할 수 있습니다. 우리는 셀러리 작업자가 항상 달리고 있는지 확인하기 위해 그것을 사용합니다.

첫째, 관리자 설치

sudo apt-get install supervisor

수퍼바이저 conf.d (/etc/supervisor/conf.d/your_proj.conf)에서 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에 알릴 수 있습니다. 먼저 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