web-dev-qa-db-ja.com

セロリ3.1では、Django定期タスクを作成する

Djangoの状況は大きく変化しているため、3.1は使用できません。助けが必要です。

Djangoでタスクを作成する を読み、 定期的なタスク ドキュメントを読みます。しかし、Djangoで定期的なタスクを作成する方法はわかりません。これは私の英語のレベルが低いためだと思います。

古いバージョンのCeleryでは、djcelerycrontabをインポートし、settings.pyでCELERYBEAT_SCHEDULEを設定しました、およびmanage.pyで実行されます。

しかし、私はもうセロリデーモンを実行することはできないようです。 CELERYBEAT_SCHEDULEを置くべき場所よりも? Django=ドキュメントの例では、proj/proj/celery.py)でos.environ.setdefault('Django_SETTINGS_MODULE', 'proj.settings')を設定します。(1)したがって、celerybeatを設定しますinsettings.py(以前のように)は大丈夫ですか?

(2)できれば、Django=で定期的なタスクを作成する小さな例が非常に役立ちます。チュートリアルを読んでいたとき、最も混乱した部分はFile Path。例全体を提供したくない場合は、タスクを作成し、ビートを設定し、デーモンを実行する必要がある場所について説明していただければ幸いです。

読んでくれてありがとう。

30
margincall

あなたはすでにドキュメントから Djangoセクション を読んでいると思いますが、これを見たことがありますか サンプルプロジェクト

スケジューラーは使用しませんが、これを_settings.py_に追加すると:

_from __future__ import absolute_import

from celery.schedules import crontab


CELERYBEAT_SCHEDULE = {
    # crontab(hour=0, minute=0, day_of_week='saturday')
    'schedule-name': {  # example: 'file-backup' 
        'task': 'some_Django_app.tasks....',  # example: 'files.tasks.cleanup' 
        'schedule': crontab(...)
    },
}

# if you want to place the schedule file relative to your project or something:
CELERYBEAT_SCHEDULE_FILENAME = "some/path/and/filename"
_

コマンドについては、_manage.py_を忘れて、直接celeryと入力するだけです:

_-B_は、いつものようにセロリビートを有効にします。

_-A_は、セロリアプリの名前を指定します。サンプルプロジェクトの celery.py にある次の行に注意してください:app = Celery('proj')

_celery -A proj worker -B -l info
_

'Django-celery'は不要です。管理者からスケジュールを管理する必要がある場合、またはタスクの結果をDjangoのORMを介したDB:

_INSTALLED_APPS += ('djcelery',)

# store schedule in the DB:
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
_
60
Adrián

Django-celeryアプリケーションを使用できます: https://pypi.python.org/pypi/Django-celery

インストール

pip install Django-celery

プロジェクトでDjango-celeryを有効にするには、djceleryをINSTALLED_APPSに追加する必要があります。

INSTALLED_APPS += ("djcelery", )
CELERYBEAT_SCHEDULER = "djcelery.schedulers.DatabaseScheduler"

次に、次の行をsettings.pyに追加します。

import djcelery
djcelery.setup_loader()

[〜#〜] usage [〜#〜]

Linuxでは、次のようにcelery-beatでworkerを実行できます。

python manage.py celeryd worker --loglevel=DEBUG  -E -B -c 1
python manage.py help celeryd #to find out the args meaning

また、Django adminでタスクを監視します。監視機能を有効にするには、celerycamを実行する必要があります。

python /var/www/gorod/manage.py celerycam

定期的なタスクを作成するには、celery.decorators.periodic_taskを使用できます。

# myapp/tasks.py
import datetime
import celery

@celery.decorators.periodic_task(run_every=datetime.timedelta(minutes=5))
def myfunc():
    print 'periodic_task'

または使用する

# settings.py
CELERYBEAT_SCHEDULE = {
    'add-every-30-seconds': {
        'task': 'tasks.add',
        'schedule': timedelta(seconds=30),
        'args': (16, 16)
    },
}
23