Django                
            관리자와 함께 셀러리를 운영 중
        
        
            
    수색…
셀러리 구성
셀러리
- 설치 - - pip install django-celery
- 더하다 
- 기본 프로젝트 구조. - - 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
- 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)
- stack/stack/__init__.py다음 코드를 추가하십시오 :- from __future__ import absolute_import from .celery import app as celery_app # noqa
- 작업을 생성하고이를 - @shared_task()처럼 표시하십시오.- @shared_task() def add(x, y): print("x*y={}".format(x*y))
- 셀러리 작업자를 "손으로"실행 : - celery -A stack worker -l info추가하려는 경우- celery -A stack worker -l info
러닝 감독관
- 셀러리 작업자를 시작하는 스크립트를 작성하십시오. 앱 내에 스크립트를 삽입하십시오. 예 : - 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'
- 새로 생성 된 스크립트에 실행 권한을 추가하십시오. - chmod u+x bin/celery_worker_start
- 수퍼바이저 설치 (수퍼바이저가 이미 설치되어있는 경우이 테스트 건너 뛰기) - apt-get install supervisor
- 셀러리를 시작하려면 상사를위한 설정 파일을 추가하십시오. - /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
- 다시 읽고 감독 관리자 - sudo supervisorctl reread stack-celery-worker: available sudo supervisorctl update stack-celery-worker: added process group
- 기본 명령 - 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