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