4

私の目標は、必要に応じて後でタスクを取り消すことができるように、django celery chord 呼び出しからすべての task_ids を取得することです。ただし、タスク ID を取得する正しい方法がわかりません。私はコードを次のように実行します。

c = chord((loadTask.s(i) for i in range(0, num_lines, CHUNK_SIZE)), finalizeTask.si())
task_result = c.delay()
# get task_ids

task_result の children 変数を調べましたが、None です。

次のように、グループと別のタスクを使用してコード セマンティクスを手動で作成し、関連する task_id を取得できますが、呼び出しを分割するのは好きではありません。このコードがタスク内でサブタスクとして実行されると、ファイナライズ タスクが開始される前にグループが取り消されると、メイン タスクがハングする可能性があります

g = group((loadTask.s(i) for i in range(0, num_lines, CHUNK_SIZE))) 
task_result = g.delay()
storeTaskIds(task_result.children)
task_result.get()

task_result2 = self.finalizeTask.delay()
storeTaskIds([task_result2.task_id])

どんな考えでも大歓迎です!

4

1 に答える 1

1

私は似たようなことをしようとしています.1回の呼び出しでコードを取り消すことができ、その中のすべてが再帰的に取り消されることを望んでいました.

グループからコードを作成finalizeTaskし、通話を分割しないようにすることができます。

これはあなたが尋ねてから 2 か月後に来ることはわかっていますが、誰かの助けになるかもしれませんし、グループ内のすべてのタスク ID を取得する必要があるかもしれません。

于 2013-11-18T15:46:32.950 に答える