带内部输入的Ruffus管道

时间:2016-08-08 15:26:57

标签: python cluster-computing distributed-computing pipeline ruffus

我想用Python的Ruffus包创建一个管道,我正在努力解决它最简单的概念。两个任务应该一个接一个地执行。第二个任务取决于第一个任务的输出。在Ruffus文档中,所有内容都是为从/向外部文件导入/导出而设计的。我想处理像字典这样的内部数据类型。

问题是@follows不接受输入而@transform不接受输入。我错过了什么吗?

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

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

最终,管道应该在一个类中组合一组函数,以便随时更新类对象。

1 个答案:

答案 0 :(得分:0)

当存在输入/输出文件时,您应该只使用Ruffus装饰器。例如,如果task1生成file1.txt并且这是生成task2的{​​{1}}的输入,那么您可以按如下方式编写管道:

file2.txt

如果您只想将字典作为输入,则不需要Ruffus,您可以恰当地订购代码(因为它将按顺序运行)或在{{1}中调用@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 }:

task1