2

親タスクAが呼び出された引数に、その子タスクZからアクセスすることは可能ですか?言い換えると、タスクZがチェーンで呼び出された場合、タスクAが起動されたときに呼び出されたが、タスクAとZの間の中間ノードを通過しなかった引数Vに何らかの方法でアクセスできますか?もしそうなら、どのように?

結果のバックエンドにRabbitMQでCelery3.0を使用する。

4

1 に答える 1

1

私は暫定的に「いいえ」で自分の質問に答えるつもりです-そして私より知識のある誰かが解決策を持って戻ってくることを願っています。

Celeryのドキュメントを詳しく調べた後、親タスクが呼び出された引数にアクセスする方法はないのではないかと思います。ドキュメントによると:

タスクはその存続期間中にいくつかの可能な状態を経て遷移し、各状態には任意のメタデータが付加される場合があります。タスクが新しい状態に移行すると、前の状態は忘れられます。

タスクは、保留中、開始済み、成功、失敗、再試行、および取り消しのいずれかの状態になります。私のシナリオでは、ここでの鍵は、成功状態であるように思われます。私がやりたいのは、特定の成功したタスクについて、(その)親タスクのIDを見つけて、親が呼び出された引数を表示することです。ただし、ドキュメントによると、SUCCESS状態のタスクには、この種のデータは含まれません(親タスク自体は、子タスクを生成する限り成功しているため)。

SUCCESSタスクが正常に実行されました。

メタデータ:結果には、タスクの戻り値が含まれます。伝播:はい準備完了:はい

言い換えれば、ここには厳しい制限があるように思われます。関心のある親タスクのIDを見つけることができたとしても、それは正常に実行されたため、戻り値のみが含まれているため、定義上、呼び出された引数にアクセスできません(もはや引数)。

于 2013-02-18T16:17:09.207 に答える