[英]Organizing files when using Luigi pipeline?
我在工作流程中使用Luigi。 我的工作流程分為三個常規部分-導入,分析和導出。 在每個部分中,都有多個Luigi任務。
我可以將所有內容放在一個文件中。 但是,如果我想將所有內容分開,例如具有data_import.py
, analysis.py
和export.py
。
例如,如果data_import.py
看起來像:
import luigi
class import_task_A(luigi.Task):
def requires(self):
return []
def output(self):
return luigi.LocalTarget('myfile.txt')
def run(self):
my import stuff
if __name__ == '__main__':
luigi.run()
但是,如果export.py中的任務取決於import.py中的任務怎么辦。 我會做:
from data_import import import_task_A
import luigi
class export_task_A(luigi.Task):
def requires(self):
return import_task_A()
def output(self):
return luigi.LocalTarget('myfile.txt')
def run(self):
my import stuff
if __name__ == '__main__':
luigi.run()
如果我將較大的項目分解為多個.py
文件,那么告訴Luigi哪個文件中需要執行哪些任務的最佳方法是什么? 好像這種方法會很麻煩。
為什么會變得麻煩? 如果您的export_task_A依賴於許多任務,那么您的def要求將變為:
def requires(self):
return [import_task_A(), import_task_B()]
在這種情況下,您可能要刪除
if __name__ == '__main__':
luigi.run()
從您的data_import.py。 也可以代替data_export.py中的用法
if __name__ == '__main__':
luigi.build([export_task_A()])
不確定是否有解決方法。 您要么需要包含多個文件,要么需要在一個文件中包含多個類。 您希望如何組織項目是一個優先事項。
您可以做的一件事就是限制導入位置的數量,就是讓一個python文件導入所需的所有Luigi類
# my_tasks.py
from data_import import import_task_A
from export import export_task_A
然后,在其他文件中,您可以從my_tasks
導入所需的任何內容。 還可以考慮使用getattr
或importlib
在導入和訪問類上提供更多靈活性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.