1

task.py でスケジュールされたタスクを作成しましたが、実行されていないようです。ワーカーを再起動しましたが、通常のタスクは問題なく実行されます。私はこれに慣れていないので、何かを見逃していませんか?設定に必要な設定はありますか?

エラーは発生しません。これは私の task.py です。

  from celery.task import Task
  from celery.decorators import task
  from celery.task import PeriodicTask
  from datetime import timedelta

class ProcessScheduledRequests(PeriodicTask):
    run_every = timedelta(minutes=5)

    def run(self, **kwargs):

       process_something()
4

1 に答える 1

2

定期的なタスクの実行

これまでに何を試したか、またはsettings.pyファイルがどのように見えるかはわかりませんが、djcelery にスケジュールされたタスクを実行させる方法をいくつか示します。

1)tasks.pyで、タスクを作成し、celery.decorators.periodic_taskデコレータを使用します。例えば

from celery.task.schedules import crontab   
from celery.decorators import periodic_task 

@periodic_task(run_every=crontab(hour=”*”, minute=”*”, day_of_week=”*”)) 
def a_periodic_task(): 
        print “Hello World!”

また

@celery.decorators.periodic_task(run_every=datetime.timedelta(minutes=5))
def a_periodic_task(): 
        print “Hello World!”

2)celery.confファイルでは、次のCELERYBEAT_SCHEDULEように設定を使用します。

from datetime import timedelta

CELERYBEAT_SCHEDULE = {
    "runs-every-30-seconds": {
        "task": "tasks.add",
        "schedule": timedelta(seconds=30),
        "args": (16, 16)
     },
}

詳細については、定期的なタスクのドキュメントを参照してください。

ただし、次の方法でセロリをビートモードで開始する必要があることに注意してください。

python manage.py celeryd -B

また、追加や実行を含むすべてのインストール手順djceleryを完了したことを確認してください(または南を使用している場合)INSTALLED_APPSpython manage.py syncdbpython manage.py migrate djcelery

展開

セロリのドキュメントには、デプロイ用のセロリ プロセスのデーモン化に関する優れたセクションがあり、ビート モードの django 設定の例が含まれています。

ドキュメントから:

# Where the Django project is.
CELERYBEAT_CHDIR="/opt/Project/"

# Name of the projects settings module.
export DJANGO_SETTINGS_MODULE="settings"

# Path to celerybeat
CELERYBEAT="/opt/Project/manage.py celerybeat"

# Extra arguments to celerybeat
CELERYBEAT_OPTS="--schedule=/var/run/celerybeat-schedule"
于 2013-05-29T09:44:52.603 に答える