XComs(cross-communications)
完全に独立したタスク間でデータを受け渡す仕組み
少量なのででかいデータは渡さないであげて
XComは、キー(基本的には名前)、およびタスクIDとダグIDによって識別されます。XComは任意の(シリアライズ可能な)値を持つことができるが、少量のデータのためにのみ設計されている; データフレームのような大きな値を渡すために使用しないでください。
キーとタスクIDとDAG IDで識別する
つまり同じタスクであってもキーを変えればnのXComsが使えるし、同じタスク同じキーであってもDAG(ワークフローの実行経路)が違えば別のXComsが使えるsta.icon
XCom は、タスクインスタンスの xcom_push と xcom_pull メソッドを使用して、ストレージとの間で明示的に "プッシュ" と "プル" されます。多くの演算子は、do_xcom_push 引数を True に設定すると、結果を return_value という XCom キーに自動的にプッシュします(デフォルト)。@task 関数も同様にこれを行います。
xcom_pushでデータを送る
xcom_pullでデータを持ってくる
xcom_pull は、キーが渡されないとデフォルトでこのキーを使用します。つまり、次のようなコードを書くことができます。
デフォルトでは return_value というキーが使われるsta.icon*2
XComはVariablesの親戚ですが、主な違いは、XComはタスクインスタンス単位で、DAGラン内の通信用に設計されているのに対し、Variablesはグローバルで、全体的な設定と値の共有のために設計されている点です。注:最初のタスク実行が成功しなかった場合、再試行のたびにタスクXComがクリアされ、タスク実行がべき等となる。
XComsは冪等
カスタムバックエンド
XComsの内部で使ってるストレージは、別のにも設定できる
独自のバックエンドを実装したい場合は、BaseXComのサブクラスを作成し、serialize_valueとdeserialize_valueメソッドをオーバーライドする必要があります。