1

Python 用の Ruffus パッケージを使用してパイプラインを作成したいのですが、その最も単純な概念に苦労しています。2 つのタスクを順番に実行する必要があります。2 番目のタスクは、最初のタスクの出力に依存します。Ruffus のドキュメントでは、すべてが外部ファイルから/へのインポート/エクスポート用に設計されています。辞書のような内部データ型を処理したいと思います。

問題は、@follows が入力を受け取らず、@transform が辞書を取らないことです。何か不足していますか?

def task1():
    # generate dict
    properties = {'status': 'original'}
    return properties

@follows(task1)
def task2(properties):
    # update dict
    properties['status'] = 'updated'
    return properties

最終的に、パイプラインは、外出先でクラス オブジェクトを更新する一連の関数をクラスに結合する必要があります。

4

1 に答える 1

0

入力/出力ファイルがある場合にのみ Ruffus デコレータを使用してください。たとえば、task1生成され、これが生成するfile1.txtの入力である場合、次のようにパイプラインを記述できます。task2file2.txt

@originate('file1.txt')
def task1(output):
    with open(output,'w') as out_file:
        # write stuff to out_file

@follows(task1)
@transform(task1, suffix('1.txt'),'2.txt')
def task2(input_,output):
    with open(input_) as in_file, open(output,'w') as out_file:
        # read stuff from in_file and write stuff to out_file

辞書を入力として取りたいだけの場合は、Ruffus は必要ありません。コードを適切に並べ替えるだけで (順番に実行されるため)、次のように呼び出すことができtask1ますtask2

def task1():
    properties = {'status': 'original'}
    return properties

def task2():
    properties = task1()
    properties['status'] = 'updated'
    return properties
于 2016-08-09T11:38:20.037 に答える