タスク内からタスクのtask_id値を取得するにはどうすればよいですか?私のコードは次のとおりです。
from celery.decorators import task
from Django.core.cache import cache
@task
def do_job(path):
"Performs an operation on a file"
# ... Code to perform the operation ...
cache.set(current_task_id, operation_results)
アイデアは、タスクの新しいインスタンスを作成するときに、タスクオブジェクトからtask_id
を取得することです。次に、タスクIDを使用して、タスクが完了したかどうかを判断します。 I do n'tタスクの完了後にファイルが「クリーンアップ」され、存在する場合と存在しない場合があるため、path
値によってタスクを追跡したい。
上記の例では、current_task_id
の値をどのように取得しますか?
タスクが受け入れる場合、Celeryはいくつかのデフォルトのキーワード引数を設定します。 (** kwargsを使用するか、具体的にリストすることでそれらを受け入れることができます)
@task
def do_job(path, task_id=None):
cache.set(task_id, operation_results)
デフォルトのキーワード引数のリストはここに文書化されています: http://ask.github.com/celery/userguide/tasks.html#default-keyword-arguments
Celery 2.2.0以降、現在実行されているタスクに関連する情報はtask.request
(「コンテキスト」と呼ばれます)。したがって、このコンテキストからタスクIDを取得する必要があります(非推奨のキーワード引数からではありません)。
@task
def do_job(path):
cache.set(do_job.request.id, operation_results)
すべての利用可能なフィールドのリストはここに文書化されています: http://celery.readthedocs.org/en/latest/userguide/tasks.html?highlight=requestcontext#context
セロリ3.1以降、 bind
デコレータ引数を使用して、現在のリクエストにアクセスできます。
@task(bind=True)
def do_job(self, path):
cache.set(self.request.id, operation_results)