11

django-celeryの管理インターフェイスを使用して、セロリの定期的なタスクを作成したいと思います。手動またはスクリプトによって呼び出されたときにうまく動作するタスクをセットアップしました。celerybeatでは機能しません。デバッグログによると、タスクはenabled = False最初の取得時に設定されていますが、その理由は不思議です。

定期的なタスクを追加して位置引数として渡す[1, False]と、タスクは自動的に無効になり、それ以上の出力は表示されません。引数なしで追加すると、タスクは実行されますが、必要な引数を指定しなかったため、すぐに例外が発生します (理にかなっています)。

ここで何が問題なのか誰にもわかりますか?

前もって感謝します。

これは、引数を指定した後の出力です。

[DEBUG/Beat] SELECT "djcelery_periodictask"."id", [...] 
             FROM "djcelery_periodictask" 
             WHERE "djcelery_periodictask"."enabled" = true ; args=(True,)

[DEBUG/Beat] SELECT "djcelery_intervalschedule"."id", [...] 
             FROM "djcelery_intervalschedule" 
             WHERE "djcelery_intervalschedule"."id" = 3 ; args=(3,)

[DEBUG/Beat] SELECT (1) AS "a" 
             FROM "djcelery_periodictask" 
             WHERE "djcelery_periodictask"."id" = 3  LIMIT 1; args=(3,)

[DEBUG/Beat] UPDATE "djcelery_periodictask" 
             SET "name" = E'<taskname>', "task" = E'<task.module.path>', 
                 "interval_id" = 3, "crontab_id" = NULL, 
                 "args" = E'[1, False,]', "kwargs" = E'{}', "queue" = NULL, 
                 "exchange" = NULL, "routing_key" = NULL, 
                 "expires" = NULL, "enabled" = false, 
                 "last_run_at" = E'2011-05-25 00:45:23.242387', "total_run_count" = 9, 
                 "date_changed" = E'2011-05-25 09:28:06.201148' 
             WHERE "djcelery_periodictask"."id" = 3; 
             args=(
                   u'<periodic-task-name>', u'<task.module.path>', 
                   3, u'[1, False,]', u'{}', 
                   False, u'2011-05-25 00:45:23.242387', 9, 
                   u'2011-05-25 09:28:06.201148', 3
             )

[DEBUG/Beat] Current schedule:
<ModelEntry: celery.backend_cleanup celery.backend_cleanup(*[], **{}) {<crontab: 0 4 * (m/h/d)>}
[DEBUG/Beat] Celerybeat: Waking up in 5.00 seconds.

編集: 次の設定で動作します。なぜdjango-celeryで動作しないのか、まだわかりません。

CELERYBEAT_SCHEDULE = {
    "example": {
        "task": "<task.module.path>",
        "schedule": crontab(),
        "args": (1, False)
    },
}
4

3 に答える 3

15

同じ問題がありました。引数が JSON 形式であることを確認してください。たとえば、位置引数を [1, false] に設定してみてください -- 小文字の「false」 -- django-celery インスタンス (バージョン 2.2.4) でテストしたところ、動作しました。

キーワード引数には、{"name": "aldarund"} のようなものを使用します

于 2011-06-21T17:33:39.990 に答える
7

私も同じ問題を抱えています。

djcelery の PeriodicTask モデルの説明 (「JSON エンコードされた位置引数」) で、Evan の回答と同じです。python json lib を使用して、保存する前にエンコードしてみます。

そして、これは私と一緒に働きます

import json 
o = PeriodicTask()
o.kwargs = json.dumps({'myargs': 'hello'})
o.save()

セロリ バージョン 3.0.11

于 2012-10-09T14:29:45.843 に答える