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
も追加したい場合
実行中のスーパーバイザ
セロリの作業を開始するスクリプトを作成します。アプリ内にスクリプトを挿入します。次に例を示し
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
セレブとセロリ+ラビットMQ
Celeryでは、メッセージ・パッシングを処理するためにブローカが必要です。私たちは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アプリケーションで定義されたタスクを実行するように開始します。
Supervisorは、Unixプロセスを制御して実行できるようにする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