私は、多くの関数をまとめて正しい順序で実行できる、単純なワークフロー/パイプラインオブジェクトをPythonで記述しようとしています。ですから、最終的には、ある関数の出力が別の関数への入力としてパイプされ、関数間でこれらの変数をマップできるようにしたいというグラフになります。次のように私はこれを行うことができます思った一つの方法は次のとおりです。あるオブジェクトから別のオブジェクトへの出力を遅れて別のものにマッピングする
class Node1(object):
def __init__(self):
self.inputs = {}
self.inputs['a'] = None
self.inputs['b'] = None
self.outputs = {}
self.outputs['result'] = None
def add_input(self, key, value):
self.inputs[key] = value
def run(self):
self.outputs['result'] = 42
class Node2(object):
def __init__(self):
self.inputs = {}
self.inputs['num1'] = None
self.outputs = {}
self.outputs['num2'] = None
def add_input(self, key, value):
self.inputs[key] = value
def run(self):
self.outputs['num2'] = self.inputs['num1'] * 5
は今、1のような何かを行うことができます。今すぐ
n1 = Node1()
n1.inputs['a'] = 5
n1.inputs['b'] = 15
n2 = Node2()
n2.inputs['num1'] = n1.outputs['num2']
n1.run()
n2.run()
を、この方法の問題点は、n1.outputs['num2']
のみrun()
関数の後に計算されていることですn1
オブジェクトで呼び出されます。私が知っている限り、私はPythonで参照を使用することはできません。したがって、このコードは、None * 5
を複数試行するので失敗します。修正は次のとおりです。接続がワークフローのビットが実行された後に行わなければならないとして、それはspecifying
ワークフローは非常に困難にして
n1.run()
n2.inputs['num1'] = n1.outputs['num2']
n2.run()
しかし、これは迷惑です。
誰でもこの問題の良い解決策を提案できますか? C++では、単純に参照を使うことができましたが、この場合Pythonで何をすべきかわかりません。
私は基本的にシャワーでこれも考えていました。基本的には、コンテナも渡してください! – Luca