Django-Celeryにスケジュールをセットして動くようにする@ローカル
monkeyjack人工植物草Imitation CeleryリーフグリーンFoliage Home Decor 0fc86a448d9ee0e32f6ad4b8bd12d311
- 出版社/メーカー: MonkeyJack
- メディア: ホーム&キッチン
- この商品を含むブログを見る
コメント
Celery(セロリ)のスケジューラーを使います
追記部分
#settings.py from datetime import timedelta CELERYBEAT_SCHEDULE = { 'add-every-300-seconds': { 'task': '<app名>.tasks.test_def', 'schedule': timedelta(seconds=300), 'args': (16, 16) }, } CELERY_TIMEZONE = 'Asia/Tokyo'
なんかどうも5分に1回の起動が最短ペースの模様。数秒に一回だとcelery側でエラーがでた。
つぎに走らせる関数
#<app名>.tasks.py @shared_task def test_def(): print("scheduler is fine!")
celery.beat.SchedulingError: Couldn't apply scheduled task add-every-300-seconds: test_def() takes 0 positional arguments but 2 were given
こうしていると、このエラーがでる。どうもスケジューラー経由の実行だと、たくさん規定の引数をぶちこむようだ。
なので、
↓
こうする。*args
をつけて可変長で引数を受け入れられるようにする。
#<app名>.tasks.py @shared_task def test_def(*args): print("scheduler is fine!")
これでよし。
Cerelyの起動もスケジューラー利用時は-Bオプションをつける
$ celery -A [proj名] worker -l info
↓
こうする
$ celery -A [proj名] worker -l info -B
これでうまく動いた!^^/