4

ローカル開発にはdjkombuトランスポートを使用していますが、本番環境ではおそらくamqp(ウサギ)を使用します。

特定のタイプの障害を繰り返して再送信できるようにしたいと思います。これは、サーバーで何かが失敗した場合や、データの新しいバリエーションによって引き起こされたエッジケースのバグの場合です。

そのため、バグが修正された後、またはサードパーティのサイトがバックアップされた後、最大12時間後にジョブを再送信することができます。

私の質問は、結果バックエンドを介して古い失敗したジョブにアクセスし、同じパラメータなどでそれらを再送信する方法はありますか?

4

2 に答える 2

4

おそらく、次を使用して古いジョブにアクセスできます。

CELERY_RESULT_BACKEND = "database"

そしてあなたのコードで:

from djcelery.models import TaskMeta
task = TaskMeta.objects.filter(task_id='af3185c9-4174-4bca-0101-860ce6621234')[0]

しかし、タスクが開始されているという引数を見つけることができるかどうかはわかりません...多分TaskStateで何か...

私はそれをこのように使ったことがありません。しかし、task.retry機能を検討することをお勧めしますか?セロリのドキュメントからの例:

@task()
def task(*args):
    try:
        some_work()
    except SomeException, exc:
        # Retry in 24 hours.
        raise task.retry(*args, countdown=60 * 60 * 24, exc=exc)
于 2012-07-22T14:23:16.017 に答える
3

IRCから

<asksol> dpn`:タスク引数とkwargsは結果とともに保存されません

<asksol> dpn`:ただし、独自のモデルを作成してそこに保存できます(たとえば、task_sentシグナルを使用)

<asksol>タスクの送信時には何も保存せず、メッセージのみを送信します。でも自分でやるのはとても簡単です

これは私が期待していたことでしたが、避けたかったのです。

少なくとも私は今答えを持っています:)

于 2012-07-22T19:17:15.253 に答える