2016-04-25 18 views
0

私はセロリ内で実行中のタスクを終了した後、いくつかのものをクリーンアップしようとしています。Celery + Pythonでは、task_revoked関数からタスクパラメータにアクセスするにはどうすればよいですか?

@app.task() 
def foo(bar, baz): 
    pass 
:タスクは次のように定義されている場合例えばので:どのように私は仕事関数が呼び出されたパラメータへのアクセスを得ることができ、タスク取り消された関数本体内部

1):私は現在2つの問題点を打っています

コードの中でbarbazにアクセスするにはどうすればよいですか?

2)私はタスクがX以外のものである場合にのみ、タスクを終了したいと思います。つまり、タスクを片手で調べ、もう一方の状態を設定することです。状態を検査することはできますが、私はタスク関数本体の中のコンテキストの周りに頭を上げるのが難しいです。

私はこのようなFOOを定義する場合:

@app.task(bound=True) 
def foo(self, bar, baz): 
    pass 

と言うから、それを呼び出す....フラスコのようなfoo(bar, baz)、その後、私はデコレータがないことを意味する、第三パラメータが期待されていることをエラーが発生します自己パラメータを通して自動的にコンテキストを追加しないでください。

アプリは、単にあなたが要求オブジェクトからタスクの引数を取得することができ、事前

答えて

1

celery.Celery()

のおかげであると定義されます。

from celery.signals import task_revoked 

@task_revoked.connect 
def my_task_revoked_handler(sender=None, body=None, *args, **kwargs): 
    print(kwargs['request'].args) 

これは、タスクに与えられた引数を出力します。

更新:

あなたはbindないboundを使用する必要があります。 http://docs.celeryproject.org/en/master/userguide/tasks.html#context:

@app.task(bind=True) 
def foo(self, bar, baz): 
+0

事はセロリのドキュメントは、クラスの相互作用のいくつかの並べ替えを示したが、それ以外の詳細を与えないです。私がクラス内で自分の関数を押してコールしようとすると、自己はデコレータが何も追加していないことを示唆する状態引数を持たないでしょう –

+0

@omu_negruコードに誤字があるように見えます更新された回答。実際にそれをしたのは – ChillarAnand

+0

です。ありがとうたくさんの男は、それをキャッチしていないだろう –

関連する問題