私は間に構造化データを渡すノードのネットワークを持っています。私の部分問題のために、私たちはこの枝を持っている - ノードの直鎖配列:イテレータの作成方法は?
nodes = [source, n1, n2, n3, n4]
最初のノードが互いにノードは、入力ノードから値を取得し、出力値を提供し、発電機です。現在の実装は、パイプからget()を普通に行い、パイプにput()を行い、ノードごとに別々のスレッドがあります(それには理由があります)。私はそれをyield
イテレータに変更したいと思います。
そして、私は(私たちは、ノードが呼び出し可能であることを考慮すれば)次のように評価したい:
for result in n4(n3(n2(n1(source()))):
print result
私はこのような評価コンテキストの建設を想像:
context = src
for node in nodes[1:]:
context = pipe(context, node)
for result in context:
print result
制限事項:
私はまだノードを別々に使用できるようにしたい - ネストされていない、他の手段でデータをパイプすること。ノード別のスレッドに存在する可能性があります。例:とn3
の間でパイプされたデータ(入れ子にされている可能性があります)内のあるスレッド(ネストされている可能性があります)に[source, n1,n2]
、もう1つ(入れ子になっているかもしれません)に[n3, n4]
。ケース:分岐をこのようにグループ化したい非線形のノードグラフがあるかもしれません。
node
はcontext
とpipe(context, node)
の実装は次のようになりますどのように計算状態に
を保持するクラスである必要がありますか?それとも別の方法で解決できるかどうか、ヒントはありますか?
yield from
Python 3.3 (PEP380)私のケースを助けることができますか?
私は私の質問に書いたものである - 私が達成したい原則です。問題は、計算の前にノードのリストがわからないということです。そのため、私はノードを配列 'nodes = [...]'として列挙しています。 – Stiivi
@Stiiviあなたが書いたことではありません。しかし、私は自分の答えを更新しました。 – Marcin
私は十分に明確ではないことをお詫びし、あなたの提案に感謝します - 有用な解決策であるようです。あなたはそれが標準的なPythonライブラリ( 'いいえ'または '複雑すぎる'も単純な答えとして受け入れられる)を使って行うことができると思いますか?より多くの依存関係(この場合は 'functional')を避けたいと思います。 – Stiivi