Трубопровод Ruffus с внутренними входами
Я хотел бы создать конвейер с пакетом Ruffus для Python, и я борюсь с его простейшими концепциями. Две задачи должны быть выполнены одна за другой. Второе задание зависит от выхода первого задания. В документации 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 ответ
Вы должны использовать декораторы Ruffus только при наличии файлов ввода / вывода. Например, если task1
генерирует file1.txt
и это вход для task2
, который генерирует file2.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