サーチ…


セロリの設定

セロリ

  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も追加したい場合

実行中のスーパーバイザ

  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
    

セレブとセロリ+ラビット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


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow