2016-07-07 6 views
0

ログの種類のバックトレースをログに記録したいのですが、これはできますか?結果には親があり、グラフを出力することもできますが、タスク内の親タスクまたはタスクIDは表示されず、要求自体も表示されません。親のタスクIDを各サブタスクに手動で渡す必要がありますか?セロリ - 親タスクのIDを記録するには?

結果:task_idを親と同じ値に設定しても安全ですか?

編集:コード例:理想的に私は、明らかに地元の人々を機能させるにはアクセスできませんログフィルタの内部呼び出しタスクIDを取得したい

@app.task() 
def root_task(arg): 
    if arg: 
     subtask.delay(arg) 


@app.task() 
def subtask(arg): 
    import celery 
    print(dir(celery.current_task)) # get parent task id here? 
    print(dir(celery.current_task.request)) # no parent here either 

ノート、どちらか私のためにありませんのでbind=True

答えて

1

task_idを手動で渡す必要はありません。

あなたはこの

@app.task() 
def task1(): 
    return('task1') 

@app.task() 
def task2(): 
    return('task2') 

c = chain(task1.si(), task2.si()) 

のような単純なチェーンを持っている場合は、親タスクID

In [17]: r = c() 

In [18]: r.task_id 
Out[18]: '9c17b0b6-206c-458f-96ca-be23bc20aa9b' 

In [19]: r.parent.task_id 
Out[19]: 'e1376a29-6052-427c-8c8e-b14abcb58477' 

r.parentを見ることができ、必要なすべての属性があります。

+0

私は十分にはっきりしていなかったと思います。条件付きで 'subtask.delay(...) 'を使って別のタスクを開始するタスクがあります - 私は' subtask() 'コードの中から呼び出し元の' task_id'を記録したいと思います。質問をより明確に編集します。 – Baczek

+0

@Baczek彼らは互いに関係していないので、あなたは 'task_id'を渡す必要があります。しかし、私は、task_idを親の 'task_id'と同じに設定することは良い考えではないと思います。 – ChillarAnand

関連する問題